#line 指令
将编译器内部存储的行号和文件名设置为指定值的预处理器指令。
#line lineNumber “filename” |
---|
参数
项 | 说明 |
---|---|
lineNumber |
要设置的行号。 这可以是任何整数常量。 只要结果计算结果为正确的语法,就可以对预处理令牌执行宏替换。 |
filename [可选] |
要设置的文件名。 文件名可以是字符的任意组合,必须用双引号 (“”) 括起来。 如果省略此参数,则以前的文件名保持不变。 |
备注
编译器使用行号和文件名来引用它在编译过程中发现的错误。 行号通常引用当前输入行,文件名引用当前输入文件。 各行在经过处理后,行号将递增。 如果更改行号和文件名,编译器将忽略以前的值,并继续处理新值。 #line 指令通常由程序生成器用于导致错误消息引用原始源文件而不是生成的程序。
翻译器使用行号和文件名来确定预定义宏__FILE__和__LINE__的值。 你可以使用这些宏将自我描述性错误消息插入程序文本。 __FILE__宏扩展为其内容为文件名的字符串,并用双引号 (“”) 。
示例
以下示例将行号设置为 151,文件名设置为“copy.c”。
#line 151 "copy.c"
在以下示例中,宏 ASSERT 使用预定义的宏__LINE__,如果指定的断言不为 true,则__FILE__输出有关源文件的错误消息。
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}