#line directive
文件名和行信息
更改预处理器中的当前行号和文件名。
句法
#line lineno | (1) | |
---|---|---|
#line lineno "filename" | (2) | |
说明
1)将当前预处理器行号更改为 lineno。__LINE__
超出这一点的宏的出现将扩展到 lineno 加上自此之后遇到的实际源代码行的数量。
2)还将当前的预处理器文件名更改为文件名。__FILE__
超出这一点的宏的出现将产生文件名。
任何预处理标记(宏常量或表达式)都可以作为参数,#line
只要它们扩展为有效的十进制整数(可选地跟在有效的字符串之后)。
注意
该指令被一些自动代码生成工具所使用,该工具从用另一种语言编写的文件中生成 C ++源文件。在这种情况下,#line
可以在生成的 C ++文件引用行号和原始(可编辑的)源文件的文件名中插入指令。
指令后面的行号#line __LINE__
是实现定义的(在这种情况下,有__LINE__可扩展到的两个可能值:迄今为止看到的末尾行数,或迄今为止看到的末尾行数加上结束#line指令的末尾行)。
例
#include <assert.h>
#define FNAME "test.c"
int main(void)
{
#line 777 FNAME
assert(2+2 == 5
}
可能的输出:
test: test.c:777: int main(): Assertion `2+2 == 5' failed.
参考
- C11标准(ISO / IEC 9899:2011):