如何在不扩展包含的头文件的情况下预编译 C 源文件?
Posted
技术标签:
【中文标题】如何在不扩展包含的头文件的情况下预编译 C 源文件?【英文标题】:How to pre-compile a C source file without expand the included header file? 【发布时间】:2013-04-24 04:34:33 【问题描述】:我正在使用 C 语言处理一个大型项目,该语言有很多预处理器宏:#ifdef/#if。宏在 makefile 中定义。
为了获得干净的代码,我修改了 makefile 以使用“gcc -E”。但是 gcc 预处理器也会扩展包含的头文件,这是我不期望的。
有什么方法可以在不扩展包含的头文件的情况下摆脱#ifdef/#if?我搜索了 GCC 选项,但还没有找到答案。
一个例子:
#include "a.h"
#ifdef ABC
func()
#else
func(a)
#endif
...
在makefile中,这个源码是用-DABC编译的,我正在找方法把文件改成:
#include "a.h"
func()
...
【问题讨论】:
1.我看不出这有什么用。 2.如果你真的需要这个,那么你不只是用定义制作一个单独的头文件,不包含任何头文件,然后将这个辅助头文件包含在另一个头文件中吗? 我认为large project
这一点让事情变得困难
是的,这个项目的文件太多,无法进行这种更改。
你可以在包含的头文件周围加上#ifndef _OMIT_HEADERS_
,#endif
,然后使用gcc -E -D_OMIT_HEADERS_
?
这样做的最初目的是收集项目的一些源代码指标,比如圈复杂度。 CCCC等计算工具无法识别预处理宏。
【参考方案1】:
如果您只想从代码中删除预处理器条件,您可以使用unifdef
:
unifdef -DFOO header.h
【讨论】:
我试过 sunifdef ,它工作正常。好吧,代码可以变得更简洁。谢谢!以上是关于如何在不扩展包含的头文件的情况下预编译 C 源文件?的主要内容,如果未能解决你的问题,请参考以下文章