假设我有一个包含许多预处理程序指令的源文件。是否有可能看到预处理器完成之后它的外观如何?
答案 0 :(得分:144)
cl.exe
,Microsoft Visual C ++的命令行界面,有三个不同的选项用于输出预处理文件(因此以前关于Visual C ++的响应中的不一致):
/E
:preprocess to stdout(类似于GCC的-E选项)/P
:preprocess to file /EP
:preprocess to stdout without #line directives 如果要在没有#line指令的情况下预处理文件,请合并/P
和/EP
选项。
答案 1 :(得分:118)
大多数编译器都可以选择运行预处理器。 例如,gcc提供-E:
-E Stop after the preprocessing stage; do not run the compiler proper.
The output is in the form of preprocessed source code, which is sent
to the standard output.
所以你可以跑:
gcc -E foo.c
如果找不到这样的选项,您也可以在机器上找到C预处理器。它通常被称为cpp,可能已经在你的道路上了。像这样调用它:
cpp foo.c
如果您需要从其他目录中包含标题,则可以将-I / path /传递给/ include / dir,就像使用常规编译一样。
对于Windows,我会把它留给其他海报提供答案,因为我不是那里的专家。
答案 2 :(得分:94)
右键单击解决方案资源管理器上的文件,转到“属性”。在配置属性 - > C / C ++ - >预处理器下,您正在寻找“生成预处理文件”。然后在解决方案资源管理器中右键单击该文件,然后选择“编译”。预处理文件在输出目录(例如Release,Debug)中创建,扩展名为.i(感谢Steed的评论)。
答案 3 :(得分:18)
您通常需要对预处理器的输出进行一些后处理,否则所有宏只会扩展为一个内存,这很难读取和调试。对于C代码,类似下面的内容就足够了:
gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c
对于C ++代码,它实际上要困难得多。对于GCC / g ++,我发现this Perl script很有用。
答案 4 :(得分:8)
如果您使用的是Microsoft的C ++编译器,请尝试cl /EP
。
答案 5 :(得分:8)
我对Microsoft编译器一无所知,但在GCC上你可以使用它:
gcc -E -P -o result.c my_file.h
如果你想看到评论,请使用:
gcc -E -C -P -o result.c my_file.h
this page上有更多选项可供选择。
答案 6 :(得分:6)
在Visual Studio中,您可以使用/ P。
编译文件(或项目)答案 7 :(得分:5)
正如bk1e和Andreas M.回答的那样,编译器的/ P选项将导致它预处理文件。但是,在我使用VS2005和Platform Builder(用于嵌入式ARM处理器)的项目中,项目没有在对话框中显示选项(如Jim B所述)以启用该选项。
我可以手动运行CL并添加/ P,但它失败了,因为我不知道在完整构建期间Platform Builder无形地激活了所有相应的命令行选项。所以我需要知道所有这些选项。
我的解决方案是查看build.log文件,找到执行的行
CL blah-blah-blah myfile.c
我将此行复制到剪贴板。 “blah-blah-blah”部分包含构建选项,并且非常庞大。
回到IDE中,我右键单击myfile.c,选择“Open Build Window”,然后在该窗口中粘贴了构建命令行,并添加了“/ P”。
CL /P blah-blah-blah myfile.c
完成。生成了myfile.i文件,其中包含预处理器输出。
答案 8 :(得分:2)
CPIP是一个用Python编写的新C / C ++预处理器。如果您想要预处理文件的详细直观表示,请试一试。
CPIP是一个用Python实现的C / C ++预处理器。大多数预处理器都将预处理视为一项必须尽快完成的肮脏工作。由于预处理器丢弃了许多有用的信息,有利于尽可能便宜地获得结果,因此很难在预处理阶段追踪细微的缺陷。很少有开发人员真正理解预处理,对许多人来说这是一个模糊的黑魔法。 CPIP旨在改进这一点并记录预处理的每个细节,以便CPIP可以生成一些关于文件依赖性,宏使用等的奇妙可视信息。
CPIP并非旨在替代cpp(或任何其他已建立的预处理器),而是CPIP将清晰度和理解视为比处理速度更重要。
答案 9 :(得分:2)
在Windows操作系统上,回答这个问题的简单方法是在DOS提示符下使用以下命令查看预处理文件:
CL /P /C myprogram.c
这将生成一个名为 myprogram.i 的文件。打开它,注意扩展的预处理器。