显示包含头文件后生成的c/c++文件(在翻译为机器语言之前)

show resulting c/c++ files after including headers (before translation to machine language)

本文关键字:文件 翻译 机器语言 c++ 后生 包含头 显示      更新时间:2023-10-16

关于头文件和源文件的回答是:

编译器看到一个带有头文件的大源文件(.cpp)包括在内。源文件是将要编译的编译单元编译成object文件

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

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

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

在Visual Studio中使用以下选项:/E用于stdout或/P用于打印到文件。

顺便说一下,你的问题已经单独问过了:

    Linux/GCC
  • Visual Studio

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

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