C
C 语法

#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):