猿问
下载APP

以井号开头的行和gcc预处理器输出中的'#1“ac”'之类的数字是什么意思?

以井号开头的行和gcc预处理器输出中的'#1“ac”'之类的数字是什么意思?

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


收到一只叮咚
浏览 56回答 3
3回答

斯蒂芬大帝

这些行是用于调试的提示(实际来自该行之后的代码)#&nbsp;line-number&nbsp;"source-file"&nbsp;[flags]标志的含义(空格分隔):1 - 开始新文件2 - 返回上一个文件3 - 以下文本来自系统头文件(#include <> vs #include“”)4 - 以下文本应被视为包含在隐式extern“C”块中。

慕工程0101907

这些linemarkers被提到man gcc的-P选项。该-P选项专门用于清除这些行:gcc&nbsp;-E&nbsp;-P&nbsp;source.c查看详细文档(之前已回答)。

慕森王

这些是行同步指令,它允许gcc为#included文件中的错误提供正确的错误消息。其他预处理器(例如yacc/&nbsp;bison)使用相同的机制将C错误与输入.y文件中的正确行相关联。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答