2016-08-25 37 views
1

This回答关于头文件和源文件后,C/C++的文件说:节目产生包括报头(翻译之前,机器语言)

编译器看到一个大来源(的.cpp)以其头文件中正确 包括在内。源文件是将编译到目标文件中的编译单元 。

是否有可能以某种方式查看这个大的.cpp(.c)文件?如果是的话,在Linux(gcc)和Windows(VisualStudio)平台上如何做到这一点。我试过Visual Studio中的/ P选项(右键单击解决方案资源管理器上的文件,转到属性;配置属性 - > C/C++ - >预处理器 - >预处理到文件 - > [ YES/P]),但我已经获得了几个看起来不像C++的* .i文件(也许它是C++,但有很多模板,内存分配的定义等)。我所指的答案是谈论“一个大的.cpp文件”。所以我认为只有#include指令会被替换为相应的文件,或者我错了,* .i输出是我所要求的吗?

+1

您是否在寻找[cpp](http://linux.die.net/man/1/cpp)? – dvhh

回答

5

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

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

顺便说一句,你的问题已经分开问:

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

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

+1

请不要回答您发现重复的问题(或者只是明显的重复)。将其标记为重复项,以便可以关闭。 – 2501

+0

@ 2501请参阅我的编辑 –

+0

@ 2501好的,下次我会介意的。尽管如此,在这种情况下,作者编辑了他的问题,它不再是重复的。重复标记可能被取消吗? – Sergey