包含标题后显示生成的c/c ++文件(在转换为机器语言之前)

Wak*_*nka 1 c c++

这个关于头文件和源文件的答案说:

编译器会看到一个大的源(.cpp)文件及其正确包含的标头.源文件是将编译为目标文件的编译单元.

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

PS:我已经试过在Visual Studio/P选项(关于Solution Explorer中,转到属性的文件上单击右键;配置属性- > C/C++ - >预处理器- >预处理到文件- > [YES/P] )但是我已经获得了几个*.i文件,这些文件看起来不像c ++(可能是c ++,但有许多模板,内存分配定义等).我所指的答案是谈论"一个大的.cpp文件".所以我假设只有#include指令会被相应的文件替换,或者我错了,*.i输出是我被要求的?

Ser*_*gey 5

在Linux上使用-Egcc选项.它会将"大"源代码打印到stdout,允许您将其重定向到文件.

在Visual Studio上,使用以下选项:/Estdout或/P打印到文件.

顺便提一下,您的问题已经分开询问了:

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

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


归档时间:

查看次数:

659 次

最近记录:

9 年,3 月 前