#line
在C语言中是什么意思?它会用在哪里?
6 回答
它告诉编译器以下行实际来自何处。通常只有 C 预处理器会添加这些,例如,当包含一个文件时,它会告诉编译器(基本上只看到一个数据流)我们正在查看一个不同的文件。
这可能听起来很奇怪,但是预处理器只是将头文件插入到您指定包含的位置,并且编译器可以处理整个事情(所有头文件与您的源代码一起连接),如果使用,您可以检查预处理器阶段的结果gcc 与gcc -E myfile.c
. 在那里,您会注意到#line
每当您包含文件时它都会添加一个指令,并且每当它减少提供给编译器的文本量时(例如大量注释可能会减少为单个#line
指令,向前跳过)
其他程序(例如 bison/yacc)也使用它来告诉您问题(如果存在编译问题)与特定行的规则文件有关,否则编译器将无法执行此操作,因为bison/yacc 生成 c 文件。
它被称为预处理器行控制指令。
如果使用指令,则__FILE__
和的扩展都会__LINE__
改变。#line
它使编译器将下一个源代码行的行号视为指定的编号。
它的主要用途是让编译器提供更有意义的错误信息。
您可以在IBM 的文档中找到更多解释和使用示例。
它是一个编译指示关键字:
" #line允许您修改编译器的行号和(可选)错误和警告的文件名输出。此示例显示如何报告与行号相关的两个警告。#line 200 指令强制行号为 200(尽管默认值为 #7),直到下一个 #line 指令,文件名将被报告为“特殊”。#line 默认指令将行编号返回为其默认编号,该编号计算由前一个指令重新编号的行。 "
它允许您更改文件的明显行号。
我能想到的唯一用途是在一系列多行宏之后使行号保持正常。
用法是:
#line 42
它主要用于提供创建 C 文件(无论是头文件还是实现)的源文件的文件名和行号。鉴于此,编译器将发出提示源文件而不是生成文件的诊断信息。
Preprocessors also use this to hint at included headers in a preprocessed file that has these expanded.
# is the string injing symbol to the processor c and c++