我试图了解一些代码,并且我遇到了一个我以前从未见过的关键字.我试图谷歌它,但也没有找到任何关于它的东西.
char *valtext;
#line 1 "Values.l"
#define INITIAL 0
#line 2 "Values.l"
int reserve(char *s);
#line 388 "lex.val.c"
Run Code Online (Sandbox Code Playgroud)
我已经包含了整个块,希望有人可以帮助我理解这段代码.我在我的系统上找不到名为"Values.l"的任何文件,这段代码位于"lex.val.c"文件中.
提前致谢.
Kei*_*son 10
一个#line指令集,编译器的当前文件名和行号设置.这会影响__FILE__和__LINE__符号,失败生成的输出assert()以及诊断消息(错误和警告).它通常由预处理器使用,以便错误和警告消息可以引用原始源代码,而不是预处理器的输出(通常在您看到任何消息时丢弃).
它也被生成C源代码的其他工具使用,例如lex/flex和yacc/bison,因此错误消息可以引用输入文件而不是(临时)生成的C代码.
最终参考文献是C标准(pdf),第6.10.4节.
一行表格
#line number
Run Code Online (Sandbox Code Playgroud)
设置当前行号.一行表格
#line number "file-name"
Run Code Online (Sandbox Code Playgroud)
设置行号和文件名.您还可以通过宏扩展生成这两种形式中的一种; 例如:
#define LINE 42
#define FILE "foo.c"
#line LINE FILE
Run Code Online (Sandbox Code Playgroud)