Source Insight不能正确识别C/C++宏的解决办法

Source Insight为我们阅读他人的代码提供了非常方便的功能,但是因为Source Insight的macro token的处理与C/C++的预处理器是不一样的,因此它会将某些宏(声明修饰宏)识别成函数。网上也有针对的解决方案,但这些解决方案并不完整,例如并不能很好解决unimrcp中定义的宏。

虽然我自己的方法也没法完全让Source Insight正确识别unimrcp所有的宏,但效果比网上的已经好很多了。

我的方法也只是对网上的解决方案的一种补充:

修改安装目录下的C.tom

这个就是网上流传的解决方法。按照官网的说法,还可以给每个工程一个独有的C.tom,但我自己试过,行不通。这个文件的作用只是告诉Source Insight某个符号是一个宏,因此并不需要定义宏的值,只需要声明宏的名称就可以了。

注意:修改C.tom后,需要关闭工程,然后打开工程,在build整个工程。

; ';' 表示该行为注释
; unimrcp
MRCP_DECLARE(x)
APT_BEGIN_EXTERN_C
APT_DECLARE(x)
MPF_DECLARE(x)
RTSP_DECLARE(x)
APT_LOG_SOURCE_IMPLEMENT(x,y,z)
APU_DECLARE(x)
MRCP_PLUGIN_LOG_SOURCE_IMPLEMENT(x,y)
MRCP_PLUGIN_DECLARE(x)
ASR_CLIENT_DECLARE(x)
; apr  
APR_INLINE
APR_DECLARE(x)
APR_RING_INIT(x,y,z)
APR_RING_HEAD(x,y)
APR_DECLARE_NONSTD(x)

设置条件宏的值

按照上一步的方法修改C.tom,依然有些宏会被识别成函数,很有可能是受条件宏的影响。这个时候使用Project->Project Settings->Conditions。

遗留问题

Source Insight对复合结构类型中用宏声明的成员也无法识别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值