C 中的 #line 关键字

2024-02-01

我试图理解一些代码,但遇到了一个我以前从未见过的关键字。我尝试用谷歌搜索它,但也没有找到任何有关它的信息。

char *valtext;
#line 1 "Values.l"
#define INITIAL 0
#line 2 "Values.l"
int reserve(char *s);
#line 388 "lex.val.c"

我已经包含了整个块,希望有人可以帮助我理解这段代码。我在系统上找不到任何名为“Values.l”的文件,并且这段代码位于“lex.val.c”文件中。

提前致谢。


A #line指令设置编译器对当前文件名和行号的设置。这会影响__FILE__ and __LINE__符号,失败生成的输出assert()和诊断消息(错误和警告)。它通常由预处理器使用,以便错误和警告消息可以引用原始源代码,而不是预处理器的输出(通常在您看到任何消息时会被丢弃)。

它也被其他生成 C 源代码的工具使用,例如 lex/flex 和 yacc/bison,因此错误消息可以引用输入文件而不是(临时)生成的 C 代码。

最终的参考是C标准 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf(pdf),第 6.10.4 节。

一行表格

#line number

设置当前行号。一行表格

#line number "file-name"

设置行号和文件名。您还可以通过宏扩展生成这两种形式之一;例如:

#define LINE 42
#define FILE "foo.c"
#line LINE FILE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的 #line 关键字 的相关文章

随机推荐