37

#lineC语言中是什么意思?它会用在哪里?

4

6 回答 6

45

它告诉编译器以下行实际来自何处。通常只有 C 预处理器会添加这些,例如,当包含一个文件时,它会告诉编译器(基本上只看到一个数据流)我们正在查看一个不同的文件。

这可能听起来很奇怪,但是预处理器只是将头文件插入到您指定包含的位置,并且编译器可以处理整个事情(所有头文件与您的源代码一起连接),如果使用,您可以检查预处理器阶段的结果gcc 与gcc -E myfile.c. 在那里,您会注意到#line每当您包含文件时它都会添加一个指令,并且每当它减少提供给编译器的文本量时(例如大量注释可能会减少为单个#line指令,向前跳过)

其他程序(例如 bison/yacc)也使用它来告诉您问题(如果存在编译问题)与特定行的规则文件有关,否则编译器将无法执行此操作,因为bison/yacc 生成 c 文件。

于 2010-02-07T09:36:31.360 回答
21

它被称为预处理器行控制指令

如果使用指令,则__FILE__和的扩展都会__LINE__改变。#line它使编译器将下一个源代码行的行号视为指定的编号。

它的主要用途是让编译器提供更有意义的错误信息。

您可以在IBM 的文档中找到更多解释和使用示例。

于 2010-02-07T09:34:00.123 回答
3

它是一个编译指示关键字:

" #line允许您修改编译器的行号和(可选)错误和警告的文件名输出。此示例显示如何报告与行号相关的两个警告。#line 200 指令强制行号为 200(尽管默认值为 #7),直到下一个 #line 指令,文件名将被报告为“特殊”。#line 默认指令将行编号返回为其默认编号,该编号计算由前一个指令重新编号的行。 "

于 2010-02-07T09:36:50.083 回答
1

它允许您更改文件的明显行号。

我能想到的唯一用途是在一系列多行宏之后使行号保持正常。

用法是:

#line 42
于 2010-02-07T09:34:35.277 回答
0

它主要用于提供创建 C 文件(无论是头文件还是实现)的源文件的文件名和行号。鉴于此,编译器将发出提示源文件而不是生成文件的诊断信息。

Preprocessors also use this to hint at included headers in a preprocessed file that has these expanded.

于 2010-02-07T09:38:39.217 回答
-6

# is the string injing symbol to the processor c and c++

于 2010-08-28T06:39:40.240 回答