Filename and line information
更改预处理器中的当前行号和文件名。
目录 |
语法
#line
lineno
|
(1) | ||||||||
#line
lineno
"
filename
"
|
(2) | ||||||||
说明
任何预处理记号(宏常量或表达式)只要展开后形成有效的十进制整数(可选地后接有效字符串),都允许作为 #line 的参数。
lineno
必须是由至少一个十进制数字组成的序列(否则程序格式错误),且始终被解释为十进制数(即使以
0
开头)。
如果
lineno
为
0
或大于
32767
(C99前)
2147483647
(C99起)
,则行为未定义。
注释
该指令被某些自动代码生成工具使用,这些工具通过其他语言编写的文件生成C源文件。在这种情况下, #line 指令可被插入到生成的C文件中,用于引用原始(人工可编辑)源文件的行号和文件名。
指令 #line __LINE__ 后面的行号是未指定的(在这种情况下 __LINE__ 可能展开为两个可能的值:当前已处理的行数,或当前已处理的行数加上结束 #line 指令的换行符)。这是 DR 464 的结果,该决议具有追溯效力。
示例
#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.
参考文献
- C17 标准 (ISO/IEC 9899:2018):
-
- 6.10.4 行控制 (p: 126)
-
- J.1 未指定行为
- C11 标准 (ISO/IEC 9899:2011):
-
- 6.10.4 行控制 (p: 173)
- C99标准(ISO/IEC 9899:1999):
-
- 6.10.4 行控制(页码:158)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 3.8.4 行控制
参见
|
C++ documentation
for
Filename and line information
|