首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

#line directive

更改预处理器中的当前行号和文件名。

句法

#line lineno

(1)

?

#line lineno "filename"

(2)

?

说明

1)将当前预处理器行号更改为 lineno。__LINE__超出这一点的宏的出现将扩展到 lineno 加上自此之后遇到的实际源代码行的数量。

2)还将当前的预处理器文件名更改为文件名。__FILE__超出这一点的宏的出现将产生文件名。

任何预处理标记(宏常量或表达式)都可以作为参数,#line只要它们扩展为有效的十进制整数(可选地跟在有效的字符串之后)。

注意

该指令被一些自动代码生成工具所使用,该工具从用另一种语言编写的文件中生成 C ++源文件。在这种情况下,#line可以在生成的 C ++文件引用行号和原始(可编辑的)源文件的文件名中插入指令。

指令后面的行号#line __LINE__是实现定义的(在这种情况下,有__LINE__可扩展到的两个可能值:迄今为止看到的末尾行数,或迄今为止看到的末尾行数加上结束#line指令的末尾行)。

代码语言:javascript
复制
#include <assert.h>
#define FNAME "test.c"
int main(void)
{
#line 777 FNAME
        assert(2+2 == 5);
}

可能的输出:

代码语言:javascript
复制
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线路控制

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com