#line 伪指令
预处理器行控制伪指令 为编译器消息提供行号。 它使编译器将下一个源行的行号作为指定的行号来查看。
为了使编译器对预处理源中的行号产生有意义的引用,预处理器在必要时 (例如,在包含文本的开头和结尾) 插入 #line 伪指令。
用双引号括起的文件名规范可以跟在行号后面。 如果指定文件名,那么编译器会在指定文件中查看下一行。 如果未指定文件名,那么编译器会将下一行作为当前源文件的一部分查看。
在所有 C 和 C++ 实现中, #line 伪指令上的令牌序列都需要进行宏替换。 在宏替换之后,生成的字符序列必须由十进制常量组成, (可选) 后跟以双引号括起的文件名。
您可以使用 #line 控制伪指令使编译器提供更有意义的错误消息。 以下示例程序使用 #line 控制伪指令为每个函数提供易于识别的行号:
/**
** This example illustrates #line directives.
**/
#include <stdio.h>
#define LINE200 200
int main(void)
{
func_1();
func_2();
}
#line 100
func_1()
{
printf("Func_1 - the current line number is %d\n",__LINE__);
}
#line LINE200
func_2()
{
printf("Func_2 - the current line number is %d\n",__LINE__);
}此程序生成以下输出:
Func_1 - the current line number is 102
Func_2 - the current line number is 202
在 中, 预处理器增加了#line指令的限制,为C和C++编译器提供了一个通用的预处理器接口。 C++11 C99 对于符合 C99 预处理器的 C++ 预处理器, #line <integer> 预处理器伪指令的上限已从 32,767 增加到 2,147,483,647。 更多信息,请参阅 C++11 ( C++11 )中采用的 C99 预处理器功能。 
