比方说,我有许多预处理指令源文件.是否有可能看到它的外观预处理器是用它做之后?
cl.exe
,Microsoft Visual C++的命令行界面,有三个不同的选项用于输出预处理文件(因此在以前的Visual C++响应中不一致):
/E
:预处理到stdout(类似于GCC的-E选项)
/P
:预处理到文件
/EP
:在没有#line指令的情况下预处理到stdout
如果要在没有#line指令的情况下预处理文件,请组合使用/P
和/EP
选项.
大多数编译器都可以选择运行预处理器. 例如,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,我会留给其他海报提供答案,因为我不是那里的专家.
右键单击解决方案资源管理器上的文件,转到"属性".在配置属性 - > C/C++ - >预处理器下,您正在寻找"生成预处理文件".然后在解决方案资源管理器中右键单击该文件,然后选择"编译".预处理文件在输出目录(例如Release,Debug)中创建,扩展名为.i(感谢Steed的评论).
您通常需要对预处理器的输出进行一些后处理,否则所有宏只会扩展为一个内存,这很难读取和调试.对于C代码,类似下面的内容就足够了:
gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c
对于C++代码,它实际上要困难得多.对于GCC/g ++,我发现这个Perl脚本很有用.
尝试cl /EP
使用Microsoft的C++编译器.
我对Microsoft编译器一无所知,但在GCC上你可以使用:
gcc -E -P -o result.c my_file.h
如果你想看评论使用这个:
gcc -E -C -P -o result.c my_file.h
此页面提供更多选项.
在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,选择"Open Build Window",然后在该窗口中粘贴了构建命令行,并添加了一个"/ P".
CL /P blah-blah-blah myfile.c
完成.生成了myfile.i文件,其中包含预处理器输出.