ChatGPT解决这个技术问题 Extra ChatGPT

gcc预处理器输出中以井号和数字开头的行的含义是什么?

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


j
jdehaan

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

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

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

1 - 新文件的开始

- 返回上一个文件

- 以下文本来自系统头文件(#include <> vs #include "")

4 - 以下文本应被视为包含在隐式 extern "C" 块中。


u
uvsmtid

这些 linemarkersman gcc 中提到了 -P 选项。

为了清楚起见,-P 选项专门用于删除这些行:

gcc -E -P source.c

请参阅detailed documentation(之前已回答)。


g
geekosaur

这些是行同步指令,允许 gcc 针对 #included 文件中的错误提供正确的错误消息。其他预处理器(例如 yacc/bison)使用相同的机制将 C 错误与输入 .y 文件中的正确行相关联。


不,像 bison 这样的其他 C 代码生成器应该发出 #line 预处理器指令....

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅