【问题标题】:show resulting c/c++ files after including headers (before translation to machine language) [duplicate]在包含标题后显示生成的 c/c++ 文件(在翻译成机器语言之前)[重复]
【发布时间】:2017-01-01 14:53:01
【问题描述】:

This 关于头文件和源文件的回答说:

编译器正确地看到一个大的源 (.cpp) 文件及其标头 包括。源文件是编译单元 编译成目标文件。

是否可以以某种方式查看这个大的 .cpp (.c) 文件?如果是,如何在 Linux (gcc) 和 Windows (VisualStudio) 平台上执行此操作。

PS:我在 Visual Studio 中尝试过 /P 选项(右键单击解决方案资源管理器中的文件,转到属性;配置属性 -> C/C++ -> 预处理器 -> 预处理到文件 -> [YES /P]) 但我已经获得了几个看起来不再像 c++ 的 *.i 文件(也许它是 c++ 但有许多模板、内存分配的定义等)。我所指的答案是在谈论“一个大的 .cpp 文件”。所以我假设只有#include 指令会被相应的文件替换,还是我错了,*.i 输出是我被要求的?

【问题讨论】:

  • 您在寻找cpp 吗?

标签: c++ c


【解决方案1】:

在 Linux 上使用 -E gcc 选项。它将“大”源代码打印到标准输出,允许您将其重定向到文件。

在 Visual Studio 上,使用以下选项:/E 用于标准输出或/P 用于打印到文件。

顺便说一句,您的问题已经单独提出:

那些*.i 文件正是您所要求的,因为每个*.cpp 文件都有一个*.i 文件。如果您将单个源文件提供给gcc -E,您将在 GNU 编译器上得到相同的结果。 *.i 文件是一个 *.cpp 文件,其中所有包含完全展开。我想您的 C++ 文件直接或通过其他包含间接包含标准库头文件,因此您的预处理文件中有很多看起来很吓人的代码。尽管如此,它仍然是 C++,而且它比您的源代码中的更“纯”C++。 Visual Studio 预处理器还在其输出中包含#line 指令。编译器将使用它们来报告编译错误的正确行号。您可以使用/EP 压制它们。

要检查一切是否正确,您可以创建一个空项目并使用一些您自己的源文件和头文件,而不包括任何标准库或第三方头文件。

【讨论】:

  • 请不要回答您发现重复(或只是明显重复)的问题。将其标记为重复项,以便将其关闭。
  • @2501 请看我的编辑
  • @2501 好的,下次我会介意的。然而,在这种情况下,作者编辑了他的问题,它不再是重复的。重复标记可以取消吗?
  • @Sergey 请解释为什么这个问题不是重复的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2012-05-21
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多