文件名和行号信息

来自cppreference.com
 
 
C++ 语言
表达式
替代表示
字面量
布尔 - 整数 - 浮点
字符 - 字符串 - nullptr (C++11)
用户定义 (C++11)
工具设施
特性 (C++11)
类型
typedef 声明
类型别名声明 (C++11)
强制转换
隐式类型转换 - 显式类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
特殊成员函数
模板
杂项
 
 

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

目录

[编辑] 语法

#line 行号 (1)
#line 行号 "文件名" (2)

[编辑] 解释

1) 改变当前的预处理器行号为行号。自此之后扩展的宏 __LINE__ 将被扩展为行号加上从这里开始所遇到的源代码行的数量。

2) 同时改变当前的预处理器文件名为文件名。自此之后扩展的宏 __FILE__ 将会产生文件名

任何预处理记号(宏常量或者表达式)都允许用作 #line 的实参,只要它们扩展为有效的十进制整数,并可选地跟着有效的字符串即可。

[编辑] 注解

一些自动代码生成工具使用这个指令,它们从以其他语言编写的文件生成 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 文档