#line伪指令

javaadu
博客专家认证
2010-10-23 09:06:44
#include<stdio.h>
#line 4 "junk.c"
void main()
{
printf("in line %ds",_ _LINE_ _,_ _FIL_ _);
#line 12"temp.c"
printf("\n");
printf("in line %ds",_ _LINE_ _,_ _FIL_ _);
#line 8
printf("\n");
printf("in line %ds",_ _LINE_ _,_ _FIL_ _);
}

我的问题是:
1、这个程序在VC6.0下没有运行成功
报错为:
--------------------Configuration: temp - Win32 Debug--------------------
Compiling...
123.cpp
junk.c(6) : error C2065: '_' : undeclared identifier
junk.c(6) : error C2146: syntax error : missing ')' before identifier '_LINE_'
junk.c(6) : error C2059: syntax error : ')'
temp.c(13) : error C2146: syntax error : missing ')' before identifier '_LINE_'
temp.c(13) : error C2059: syntax error : ')'
temp.c(9) : error C2146: syntax error : missing ')' before identifier '_LINE_'
temp.c(9) : error C2059: syntax error : ')'
执行 cl.exe 时出错.
2、能否解释一下这个程序的作用?
书上的解释是:编译有错或者在交叉引用时,希望使用原来的文件名和原来的行号,则应事先在源文件中使用#line伪指令加以登记。
...全文
188 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Soulic 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lishanchao 的回复:]
printf("in line %ds",_ _LINE_ _,_ _FIL_ _); /* _ _之间有个空格,去掉它,这样-> __ */
[/Quote]
楼主还欠点基本功啊,标识符是不能有空格的嘛
javaadu 2010-10-24
  • 打赏
  • 举报
回复
而__LINE__和__FILE__分别是C语言的预定义宏,意指所在文件名、所在文件的行数
yg2362 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dream17953 的回复:]
没接触过,#line,干嘛的?
[/Quote]
语法:#line [linenumber] [filename]
他的作用就是改变__LINE__和__FILE__的值
dream17953 2010-10-24
  • 打赏
  • 举报
回复
没接触过,#line,干嘛的?
javaadu 2010-10-24
  • 打赏
  • 举报
回复
对的,我改成这样的了:
#include<stdio.h>
#line 4 "junk.c"
void main()
{
printf("in line %d of %s",__LINE__,__FILE__);
#line 12"temp.c"
printf("\n");
printf("in line %d of %s",__LINE__,__FILE__);
#line 8
printf("\n");
printf("in line %d of %s",__LINE__,__FILE__);
printf("\n");
}
bo_00 2010-10-24
  • 打赏
  • 举报
回复
%ds 行么你的编译环境?

写成%d%s 才能体现出 #line 的作用吧。
javaadu 2010-10-24
  • 打赏
  • 举报
回复
是的,我发现我的基本功太弱了,恶补去。
javaadu 2010-10-23
  • 打赏
  • 举报
回复
嗯,试过了
问题解决了:
#include<stdio.h>
#line 4 "junk.c"
void main()
{
printf("in line %ds",__LINE__,__FILE__);
#line 12"temp.c"
printf("\n");
printf("in line %ds",__LINE__,__FILE__);
#line 8
printf("\n");
printf("in line %ds",__LINE__,__FILE__);
printf("\n");
}
沭水河畔 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lishanchao 的回复:]

C/C++ code

printf("in line %ds",_ _LINE_ _,_ _FIL_ _); /* _ _之间有个空格,去掉它,是这样: __ */
[/Quote]
另外打印源文件名要用 __FILE__,而不是__FIL__。
沭水河畔 2010-10-23
  • 打赏
  • 举报
回复

printf("in line %ds",_ _LINE_ _,_ _FIL_ _); /* _ _之间有个空格,去掉它,这样-> __ */
javaadu 2010-10-23
  • 打赏
  • 举报
回复
是老师最近推荐给的一本书《从C到嵌入式C语言编程》里的一个例子,我这人看书有个习惯,就是不喜欢得过且过,不过马上就要开始C51了,不想留问题在书里。
一根烂笔头 2010-10-23
  • 打赏
  • 举报
回复
没有涉及过!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧