[小技巧]移除C/C++源码中无关的#ifdef

我们在阅读C/C++的开源代码时,常常会遇到这样的烦恼。很多开源项目是跨平台的,代码中使用了大量条件编译,充斥着各种#ifdef(#ifudef)等等。这些代码段对于源码阅读者来说,通常是一种干扰(源码阅读者通常是基于某一个固定平台的),这里介绍一种简单的方法,用来移除不必要的代码段。

首先下载一个源码处理的小工具:(其他Linux发行版请使用对应的包管理工具)

sudo apt-get install unifdef

拷贝一份源代码目录,并进入拷贝的目录中:

cp src/ src_bak/ -r && cd src_bak/

使用unifdef(假定我们要去掉所有基于WINDOWS和OSX定义的条件编译段):

find . -name "*.h" -exec unifdef -UWINDOWS -UOSX {} -o {} \;
find . -name "*.cpp" -exec unifdef -UWINDOWS -UOSX {} -o {} \;

注意命令中的{},这是find的exec选项的语法,代表find匹配到的文件本身。这里使用unifdef的-o将输出重定向到文件本身,也就是对源文件进行就地修改。(unifdef会将修改的内容输出到一个临时文件中,在完成时rename到源文件上)

posted @ 2013-03-11 23:26  PromisE_谢  阅读(1285)  评论(0编辑  收藏  举报