显示包含头文件后生成的c/c++文件(在翻译为机器语言之前)
show resulting c/c++ files after including headers (before translation to machine language)
关于头文件和源文件的回答是:
编译器看到一个带有头文件的大源文件(.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
来抑制它们。
为了检查一切是否正确,您可以创建一个空项目,并使用一些您自己的源文件和头文件,而不包括任何标准库或第三方头文件。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在Visual Studio中更新Qt翻译(.ts文件)时出现未指定错误
- 翻译单元的数量与CPP文件的数量
- 如何在Qt小部件应用程序中翻译外部文件中的字符串?
- 防止翻译文件被生成文件清理
- 在手写语法分析器中翻译语法文件
- 为什么Visual C++中的“我的语言”翻译器程序不用翻译就覆盖文件
- 如何链接标题和翻译文件
- C++德尔福头文件翻译:带有指向 void 的指针的函数
- 使用Boost库Qt c++更新翻译文件
- 创建翻译;需要从文本文件正确插入
- 在给定的翻译单元中,文件级静态变量的顺序是否始终相同
- Boost翻译:Po文件不工作
- 显示包含头文件后生成的c/c++文件(在翻译为机器语言之前)
- Qt翻译:在ts文件中,对于“确定”、“保存”、“取消”等标准按钮,我应该使用什么上下文
- 如何翻译PDF文件