C 语言中#line
的含义是什么?它会在哪里使用?
答案 0 :(得分:31)
它告诉编译器实际来自以下行的位置。通常只有C预处理器添加这些,例如,当包含文件时,它告诉编译器(基本上只看到一个数据流)我们正在查看不同的文件。
这可能听起来很奇怪,但是预处理器只是将头文件插入指定包含的位置,编译器就可以处理整个事件(所有头文件与源代码连接在一起),可以检查预处理器的结果如果将gcc与gcc -E myfile.c
一起使用,则会暂存在那里你会注意到它在你包含文件时添加了#line
指令,并且每当它减少了输入到编译器的文本量时(例如大量的注释可以减少到单个#line
}指令,向前跳过)
其他程序也会使用它,比如bison / yacc,告诉你问题(如果有编译问题)与你在特定行的规则文件有关,否则编译器将无法执行,因为bison / yacc生成c文件。
答案 1 :(得分:15)
它被称为预处理器行控制指令。
如果使用__FILE__
指令,则会更改__LINE__
和#line
的扩展。
它使编译器将下一个源行的行号视为指定的数字。
它的主要用途是使编译器提供更有意义的错误消息。
您可以在IBM's documentation中找到更多解释和用法示例。
答案 2 :(得分:1)
这是pragma关键字:
“ #line 允许您修改编译器的行号和(可选)错误和警告的文件名输出。此示例显示如何报告与行号相关的两个警告。#line 200指令强制行号为200(虽然默认值为#7),直到下一个#line指令,文件名将报告为“特殊”。#line default指令将行号返回到其默认编号,由前一个指令重新编号的行。“
答案 3 :(得分:0)
它允许您更改文件的表观行号。
我能想到的唯一用途就是在一系列多行宏之后使行号保持正常。
用法是:
#line 42
答案 4 :(得分:0)
它主要用于提供源文件的文件名和行号,从中创建C文件(标题或实现)。鉴于此,编译器将发出暗示源文件而不是生成文件的诊断信息。
预处理器还使用它来提示已扩展的预处理文件中的包含标头。
答案 5 :(得分:-5)
#是处理器c和c ++
的符号字符串