C语言中#line的含义是什么?

时间:2010-02-07 09:29:31

标签: c c-preprocessor preprocessor-directive

C 语言中#line的含义是什么?它会在哪里使用?

6 个答案:

答案 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 ++

的符号字符串