文件名和行信息
在预处理器中更改当前行号和文件名。
语法
#line 行号
|
(1) | ||||||||
#line 行号
" 文件名"
|
(2) | ||||||||
解释
任何预处理器记号(宏常量及表达式)都允许出现为 #line
的参数,只要它们展开成合法的十进制整数,可以后随一个合法的字符串。
行号 必须是至少有一个十进制位的序列(否则程序为病式),并且始终按十进制转译(即使它以
0
开始)。
若 行号 为 0 或大于 32767 (C99 前)2147483647 (C99 起) ,则行为未定义。
注意
一些自动代码生成工具从以其他语言书写的文件产生 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 Line control (第 173 页)
- C99 标准(ISO/IEC 9899:1999):
-
- 6.10.4 Line control (第 158 页)
- C89/C90 标准(ISO/IEC 9899:1990):
-
- 3.8.4 Line control