我使用
打印出C预处理器的输出gcc -E a.c
输出包含许多行,如
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3
我从未在C中看到过这种语法。有人可以解释这是做什么的吗?
答案 0 :(得分:72)
这些行是用于调试的提示(实际来自该行之后的代码)
# line-number "source-file" [flags]
标志的含义(空格分隔):
答案 1 :(得分:43)
答案 2 :(得分:1)
这些是行同步指令,允许gcc
为#include
d文件中的错误提供正确的错误消息。其他预处理器(例如yacc
/ bison
)使用相同的机制将C错误与输入.y
文件中的正确行相关联。