假设我有一个带有许多预处理器指令的源文件。是否有可能看到它在预处理器完成后的样子?
当前回答
在Visual Studio中,您可以使用/P编译文件(或项目)。
其他回答
正如bk1e和Andreas M.回答的那样,编译器的/P选项将导致它对文件进行预处理。然而,在我使用VS2005和Platform Builder(用于嵌入式ARM处理器)的项目中,该项目没有在对话框中显示选项(如Jim B所描述的)来启用该选项。
我可以手动运行CL并添加/P,但它失败了,因为我不知道Platform Builder在完整构建期间无形地激活的所有适当的命令行选项。所以我需要知道所有的选项。
我的解决方案是查看build.log文件,并找到执行的行
CL等等myfile。c
我把这行复制到剪贴板上。“废话”部分包含构建选项,而且非常大。
回到IDE,我右键单击myfile.c,选择“Open Build Window”,然后在该窗口中粘贴构建命令行,并添加“/P”。
CL /P等等myfile.c
完成了。myfile。生成I文件,其中包含预处理器输出。
cl.exe, Microsoft Visual c++的命令行接口,有三个不同的选项来输出预处理文件(因此在前面关于Visual c++的响应中不一致):
/E:预处理到stdout(类似于GCC的-E选项) /P:预处理到文件 /EP:预处理到标准输出,不使用#line指令
如果您希望预处理到一个没有#line指令的文件,请结合/P和/EP选项。
在解决方案资源管理器上右键单击该文件,转到属性。在配置属性->C/ c++ ->预处理器下,“生成预处理文件”就是你要找的。然后在解决方案资源管理器中右键单击该文件并选择“编译”。预处理文件在输出目录(例如Release, Debug)中创建,扩展名为.i(感谢Steed的评论)。
如果您正在使用微软的c++编译器,请尝试cl /EP。
在Windows操作系统上,这个问题的简单答案是在DOS提示符中使用以下命令查看预处理文件:
CL /P /C myprogram.c
这将生成一个名为myprogram.i的文件。打开它并查看扩展的预处理器。
推荐文章
- C多行宏:do/while(0) vs作用域块
- 找出质数最快的算法是什么?
- 我如何调试git/git-shell相关的问题?
- time_t最终的类型定义是什么?
- 我需要显式处理负数或零时,总和平方数字?
- c++枚举类可以有方法吗?
- 函数名周围的括号是什么意思?
- 用C语言创建自己的头文件
- Visual Studio拒绝忘记断点?
- 格式化IO函数(*printf / *scanf)中的转换说明符%i和%d之间的区别是什么?
- 将析构函数设为私有有什么用?
- main()中的Return语句vs exit()
- 为什么c#不提供c++风格的'friend'关键字?
- 如果不是内存地址,C指针到底是什么?
- 如何在Python自己的调试器(PDB)中执行多行语句