首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C预处理器默认添加

C预处理器默认添加
EN

Stack Overflow用户
提问于 2021-03-03 21:36:36
回答 1查看 169关注 0票数 1

在没有导入的情况下接受以下存根程序:

代码语言:javascript
复制
int main(void) {
    return 0;
}

在它上运行cpp会给我以下信息:

代码语言:javascript
复制
$ cpp main.c

# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "main.c"


int main(void) {
    return 0;
}

我理解它在# 1 "main.c"中添加的意思是#line 1 "main.c"或“这里是给定的main.c程序的第1行。我非常想了解其他的cpp行是做什么的。例如,这个片段:

代码语言:javascript
复制
# 1 "main.c"           <-- why necessary if we have this after the last line and re-defined?
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 22:57:40

CPP命令及其输出

当您使用cpp命令时,C预处理器将产生一个文本输出,与在编译器中使用它时不同,当它只向编译器本身传递一些二进制标记时。

因此,您正在读取的文本输出非常类似于“调试”或“日志记录”(如果您愿意的话)会话(或“讲故事”(如果您愿意))。它基本上会让你了解它是如何扩展发现的宏的。

因此,正如您已经发现的,预处理器正在以以下格式的一行输出行号信息和源文件名:

# linenum filename {flags}

名为linemarker,字面意思是:

这一行是在名为filenamelinenum行中找到的。

如果指定了任何标志,它们的范围可以从1到4,并表示如下:

  • 1 ->启动一个新文件。
  • 2 ->在包含另一个文件后,返回到以前的文件。
  • 3 ->本文的内容是从系统头中提取的,因此一些警告被抑制。
  • 4 ->将文本内容包装到extern "C"块中。

让我们逐一分析这几行:

  • # 1 "main.c"

下面一行是在line 1 of main.c,没有其他标志。所以,就像说“我开始读main.c的第1行了”

  • # 1 "<built-in>"

现在,我将阅读内置的C预加工指令。注意这些是如何显示为<System Header>的,但是如果是虚构的话。因此,这一行设置了一个标准的预定义宏,如_LINUX_或__cplusplus。

阅读更多关于那些这里的信息

额外提示:运行cpp -dM main.c查看所有预定义的宏。

  • # 1 "<command-line>"

现在,我将读取一个命令行选项,即由-D标志设置的命令行选项之一,比如-DTEST=0,甚至命令行-DTEST=0,甚至是-UTEST。这些文件再次从预处理器中显示为虚构的系统头文件。

阅读更多关于预处理选项这里的内容

  • # 31 "<command-line>"

在第31行,我正在读取来自命令行的另一个宏。(注意,它们是按找到的顺序设置的)

  • # 1 "/usr/include/stdc-predef.h" 1 3 4

我将读取位于/usr/include/stdc-predef.h的预定义宏文件,以确保该头文件将像系统文件头一样包含,并且它包含的符号被视为C符号。

  • # 32 "<command-line>" 2

我将继续阅读命令行“伪标题”,并将完成阅读。

  • # 1 "main.c"

我现在继续读main.c

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66465272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档