如何阅读大量带宏的c代码

宏有两大用途, 一是编码替换, 一是条件编译.
当阅读代码时,如果有很多条件编译宏,那对阅读者就是一种梦驿.
很多集成环境,很好的解决了条件宏问题. 它们令无效的语句为灰色.
但普通编辑器就没有这种能力了.

如果只有普通编辑器, 又想知道宏的情况,怎么办呢? ,找gcc 解决.

gcc 中的宏判别.
gcc -E -dM null.c  查看内置的宏定义
说明: 仅输出#define 命令, 输出简明.
缺点: 由于所有的宏只是简单的堆在一起,也包含内置的宏且不分组,显得多而杂乱.
适用于查找某个宏是否定义

gcc -E -dD null.c  (define)与-dM 类似,但包含预处理指令
说明: 输出#define, 也输出预处理. 并且按文件分组显示.
缺点: 显得不够简明
适用于浏览某个文件定义了哪些宏

说明:所谓预处理,就是对包含的头文件进行了展开,并且行后面往往还跟着一串数字,

说明该行信息是一个新文件(1),又回到了该文件(2),此乃系统头文件(3),此为c代码快(4)

gcc -E -dU null.c  (usage)与-dD 类似, 当使用时会判断宏是否定义
说明: 它并不输出#define 指令 及预处理指令,但是输出当你判断时宏是否已经定义.
定义过显示#define
未定义过显示#undef
适用于在一个文件中判别哪些宏定义过或未定义.
用它过滤出的文件, 跟集成环境的编辑器可以像比美了, 它直接过滤了无效的代码.

所以首次阅读大量带宏的c代码, 

推荐用集成开发环境阅读.

也可以用gcc 预处理后阅读. (假设它可以用gcc编译)

小结: gcc -E 是简单的预处理,包含include处理,包含typedef 指令,但不包含#define, #undef 宏

gcc -E -dM 不是预处理, 仅包含宏

gcc -E -dD 即做预处理,也包含宏

gcc -E -dU 是预处理过滤输出,过滤了define 后的代码, undef部分被忽略.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值