Answers:
cl.exe
,即Microsoft Visual C ++的命令行界面,具有用于输出预处理文件的三个不同选项(因此,先前有关Visual C ++的响应中存在不一致的地方):
/E
:预处理为stdout(类似于GCC的-E选项)/P
:预处理到文件/EP
:在没有#line指令的情况下预处理到标准输出如果要预处理为没有#line指令的文件,请组合/P
和/EP
选项。
/P
将禁止生成obj文件。因此,如果放置/P
选项,则可能会得到一个链接错误,提示无法找到某些obj文件,因为实际上根本没有生成该文件。
VS Developer command prompt
不是。常规命令提示符下不提供编译器。Command prompt
cl
大多数编译器都可以选择只运行预处理器。 例如,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 / to / include / dir传递给其中任何一个。
对于Windows,由于我不是专家,我将其留给其他海报提供答案。
右键单击解决方案资源管理器上的文件,转到“属性”。在“配置属性”->“ C / C ++”->“预处理器”下,您正在寻找“生成预处理文件”。然后在解决方案资源管理器中右键单击该文件,然后选择“编译”。在输出目录(例如Release,Debug)中创建带有扩展名.i的预处理文件(感谢Steed的评论)。
Release
,Debug
用扩展名).i
。
在Visual Studio中,您可以使用/ P编译文件(或项目)。
正如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,选择“打开构建窗口”,然后在该窗口中粘贴构建命令行,并添加“ / P”。
CL /P blah-blah-blah myfile.c
做完了 生成了myfile.i文件,其中包含预处理器输出。
CPIP是用Python编写的新的C / C ++预处理器。如果要详细了解预处理文件的外观,请试一下。
CPIP是用Python实现的C / C ++预处理器。大多数预处理器将预处理视为一项肮脏的工作,只是必须尽快完成。由于预处理器会抛弃大量有用的信息,从而以尽可能便宜的价格获得结果,因此在预处理阶段很难跟踪细微的缺陷。
很少有开发人员真正了解预处理,对许多人来说,这是晦涩难懂的黑魔法。CPIP旨在通过记录预处理的每一个细节来改善这一点,以便CPIP可以产生一些关于文件依赖项,宏使用情况等奇妙的视觉信息。
CPIP并非旨在替代cpp(或任何其他已建立的预处理程序),而是CPIP认为清晰度和理解比处理速度更重要。