我们在阅读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到源文件上)

转载于:https://www.cnblogs.com/promise6522/archive/2013/03/11/2954858.html

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

  1. php源码编程,10个小技巧让你做好php源码编程

    PHP是目前使用最广泛的网站编程语言,也是今后发展的一大趋势.有很多站长或多或少掌握一些php编程方法,下面小编就介绍十点实用的php编码技巧. 1.cho比print 快,并且使用echo的多重参数 ...

  2. Linux内核源码中使用宏定义的若干技巧

    在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...

  3. 直播间小游戏,带货直播源码如何实现?

    带货直播源码的更新优化速度非常快,而互动小游戏也是现在主流带货直播源码中的常见功能.当然单独拿出某一个小游戏,我们都可以将它看做一个个体,如果与视频直播结合,就可以为直播软件增光添彩了.那么,带货直播 ...

  4. 2020最新版影评小程序搭建教程(附源码获取渠道)

    废话不多说现在进入搭建教程! 首先就是 环境要求: 这里我推荐使用宝塔安装LNMP服务器环境 使用宝塔的前提是你的服务器是刚购置的,或者重新安装的没有任何东西的 安装好后直接选择 linux ngin ...

  5. 【图像去噪】基于matlab GUI butterworth+中值+维纳+小波图像去噪【含Matlab源码 520期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab GUI butterworth+中值+维纳+小波图像去噪[含Matlab源码 520期] 获取代码方式2: ...

  6. Java社交商城APP+小程序多功能B2B2C商城源码

    Java社交商城APP+小程序多功能B2B2C商城源码 功能介绍 1)用户可通过邀请好友.签到赚取糖果: 2)用户可以通过平台获取想要的商品,领券购买并获取分佣提成: 3) 用户可以通过淘宝链接搜索商 ...

  7. 微信小程序:强大工具箱组合源码

    这是一个比较强大的一款工具箱 内有去水印功能(支持几十家平台去水印) 朋友圈功能|(发圈套图等) 头像,朋友圈封面,壁纸等 另外还有快递查询,手持弹幕等 另外还有一个强大的去水印历史记录 历史记录可以 ...

  8. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  9. 小程序一键生成系统网站源码

    简介: 小程序一键生成系统网站源码,亲测没有问题,项目一本万利! 搭建部署方式: 测试环境:Linux+宝塔+php5.6+mysql5.5 第一步:修改配置信息 修改指引: 1:修改数据库配置连接路 ...

最新文章

  1. 告别人工标注!仅靠合成数据就能实现真实人脸分析!
  2. php 复选框 数组,php数组的复选框
  3. ElasticSearch Java Api(二) -检索索引库
  4. WPF定时刷新UI界面
  5. 使用MUI框架,模拟手机端的下拉刷新,上拉加载操作。
  6. c++的thread类(c++线程简单用法)
  7. Amber Group散户投资APP资管规模超10亿美元
  8. MyBatis缓存机制详解
  9. 科研ABC - 文献检索
  10. 通俗讲解光线追踪原理,一文理清各类光线追踪
  11. JavaScript获取当前时区 时间转换 (实用)
  12. Github-谷歌插件gitzip(加速器-不用再忍受几十kb/s的煎熬了)
  13. switch 求分段函数
  14. 存图片和视频到iPhone相册
  15. 雷军:我也想做高级工程师 !
  16. 【实用软件】流氓软件清理器-SoftCnKiller
  17. 三维电影特效动画制作软件——Houdini 17.5
  18. python,selenium爬取微博热搜存入Mysql
  19. Android开发高级进阶内涵段子APP项目实战视频教程
  20. 参考文献计算机程序标识代码,参考文献中计算机程序的标识代码为

热门文章

  1. linux 中samba账号登录密码,ubuntu下的Samba配置:使每个用户可以用自己的用户名和密码登录自己的home目录...
  2. mac启动本地redis_通过 Laravel Sail 构建基于 Docker 的本地开发环境
  3. 访问指定html页面,Spring boot的Controller类是如何指定HTML页面的
  4. void slove C语言什么意思,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
  5. mysql和redis统计网站活跃度,最代码网站用户私信列表采用mysql union查询优化为Redis查询的经验和相关代码片段分享...
  6. python怎么重新开始_人人都是数据科学家从新开始用Python学习数据科学的完整教程P3...
  7. 比较好的电脑系统_win10电脑系统选择什么版本比较好
  8. 求均值方差_协方差,方差,标准差
  9. C++知识点51——虚函数与纯虚函数(下)
  10. C++知识点32——使用C++标准库(关联容器set和multiset的初始化,赋值,查找,添加,删除与迭代器失效)