文件名和行信息
来自 cppreference.cn
更改预处理器中的当前行号和文件名。
目录 |
[编辑] 语法
#line 行号 |
(1) | ||||||||
#line 行号 " 文件名" |
(2) | ||||||||
[编辑] 解释
1) 将当前预处理器行号更改为 行号。此后,宏 __LINE__ 的出现将展开为 行号 加上此后遇到的实际源代码行数。
2) 还会将当前预处理器文件名更改为 文件名。此后,宏 __FILE__ 的出现将生成 文件名。
任何预处理记号(宏常量或表达式)都允许作为 #line 的参数,只要它们展开为有效的十进制整数,可选地后跟一个有效的字符串。
行号 必须是至少一个十进制数字的序列(否则程序格式错误),并且始终解释为十进制(即使它以 0
开头)。
如果 行号 为 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 行控制 (p: 158)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 3.8.4 行控制
[编辑] 另请参阅
C++ 文档 关于 文件名和行信息
|