文件名和行信息
来自 cppreference.com
更改预处理器中的源代码行号,并可选地更改当前文件名。
内容 |
[编辑] 语法
#line lineno |
(1) | ||||||||
#line lineno " filename" |
(2) | ||||||||
[编辑] 解释
1) 将当前预处理器行号更改为 lineno。 从此点开始,宏 __LINE__ 的展开将扩展为 lineno 加上自此点以来遇到的实际源代码行的数量。
2) 还将当前预处理器文件名更改为 filename。 从此点开始,宏 __FILE__ 的展开将生成 filename。
只要它们展开为有效的十进制整数,后面可选地跟着一个有效的字符字符串,任何预处理标记(宏常量或表达式)都允许作为 #line 的参数。
lineno 必须是至少一位十进制数字的序列(否则程序将是非法的),并且始终解释为十进制(即使它以 0
开头)。
如果 lineno 为 0
或大于 32767
(直到 C++11)2147483647
(自 C++11 起),行为未定义。
[编辑] 注释
此指令由一些自动代码生成工具使用,这些工具从用另一种语言编写的文件中生成 C++ 源文件。 在这种情况下,#line 指令可能会插入到生成的 C++ 文件中,引用原始(人工可编辑)源文件的行号和文件名。
[编辑] 示例
运行此代码
#include <cassert> #define FNAME "test.cc" int main() { #line 777 FNAME assert(2+2 == 5); }
可能的输出
test: test.cc:777: int main(): Assertion `2+2 == 5' failed.
[编辑] 参考文献
- C++23 标准(ISO/IEC 14882:2024)
- 15.7 行控制 [cpp.line]
- C++20 标准(ISO/IEC 14882:2020)
- 15.7 行控制 [cpp.line]
- C++17 标准(ISO/IEC 14882:2017)
- 19.4 行控制 [cpp.line]
- C++14 标准(ISO/IEC 14882:2014)
- 16.4 行控制 [cpp.line]
- C++11 标准(ISO/IEC 14882:2011)
- 16.4 行控制 [cpp.line]
- C++98 标准(ISO/IEC 14882:1998)
- 16.4 行控制 [cpp.line]
[编辑] 另请参见
(C++20) |
一个表示源代码信息(例如文件名、行号和函数名)的类 (类) |
C 文档 for 文件名和行信息
|