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/51786271/

相关文章:

linux - 与共享对象链接时 undefined reference

c - gcc 的哪个 -O3 优化标志启用 "hardware accelerated instructions"

c++ - GCC 中的表达式中间体(如果这就是它们的实际名称)

c - 使用 C 预处理器有效地重命名变量

C - 为结构数组创建初始化宏

c - 在 C 中,这个宏定义了什么?

c - C 中的位移位

c++ - 矩阵乘法(我没有返回所有值)

c - 使用递增的 ASCII 值处理字符串中的多个 '\000'

c - 可以使用什么代替#pragma comment(lib, "Ws2_32.lib")?