©
This document uses PHP Chinese website manual Release
更改预处理器中的当前行号和文件名。
#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):
6.10.4线路控制(p:173)
C99标准(ISO / IEC 9899:1999):
6.10.4线路控制(p:158)
C89 / C90标准(ISO / IEC 9899:1990):
3.8.4线路控制