c - gcc 预处理器输出中以哈希符号和数字(如 '# 1 "a.c"')开头的行的含义是什么?

标签 c gcc c-preprocessor

我使用打印出 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 语言中见过这种语法。谁能解释一下这是做什么的?

最佳答案

这些行是调试提示(该行后面的代码实际来自哪里)

# line-number "source-file" [flags]

标志的含义(空格分隔):

  • 1 - 新文件的开始
  • 2 - 返回上一个文件
  • 3 - 以下文本来自系统头文件(#include <> vs #include "")
  • 4 - 以下文本应被视为包含在隐式外部“C” block 中。

关于c - gcc 预处理器输出中以哈希符号和数字(如 '# 1 "a.c"')开头的行的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370539/

相关文章:

c - 在 malloc 中进行类型转换

c - 寻求有关安装和使用mips-gcc交叉编译器以生成自定义ASM的帮助

c - 理解 if (a>=3) 的 gcc 输出

c - 如何从多个源生成单个 LLVM IR

c - C 中的 "private header"是什么?

C:在宏中隐藏 if 语句的最佳方法

c - 链表不通过递归调用传播

c - 在 linux 内核 2.6.26 中,我找到了 "#define atomic_read(v) ((v)->counter + 0)",为什么是 "+0"?

c# - 如果 BIGENDIAN 在编译时未解析,为什么它是一个指令?

android - 如何在 Android 应用程序中嵌入 C 程序