#line指令(c/C++)
#line 指令调用预处理器更改的编译器在内部存储的行号和文件名到特定行号和文件名。
#line digit-sequence ["filename"]
备注
编译器使用该行号和选项文件名引用它在编译时发现的错误。行号通常是指当前输入行,,文件名是指当前输入文件。,在每行处理之后,行号增加。
数字顺序 值可以是任何整数常数。宏替换在预处理标记可执行,,但结果必须计算为正确的语法。文件名 引在双引号 (“) 是字符的任意组合,并且必须将。如果 文件 被省略,前面的文件名保持不变。
您可以通过编写 #line 指令修改源代码行号和文件名。转换器使用行号和文件名确定预定义的宏 __FILE 和 __LINE的值。可以使用这些宏插入自声明性错误消息到的程序文本。有关这些预定义宏的更多信息,请参见 预定义的宏。
__FILE 宏扩展到目录是文件名的字符串,用由双引号 (“)。
如果更改行号和文件名,编译器忽略以前的值并继续处理与新值。程序生成器通常用于 #line 指令使错误消息引用原始源文件 (而非生成的过程。
下面的示例演示 #line 和 __LINE 和 __FILE 宏。
此语句,在内部存储的行号设置为 151,文件名更改为 copy.c。
#line 151 "copy.c"
在此示例中,,如果给定 “断言”未得到满足,宏 ASSERT 使用预定义的宏 __LINE 和 __FILE 打印有关源文件中的错误消息。
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}