分页: 1 / 1
emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-07 10:16
由 firestone
我主要进行c和c++编程,比如在头文件定义了一些宏,发现在进行跳转的时候emacs无法对宏定义的函数进行有效解析,大家有没有好方法能处理?我用过eclipse,发现它对宏能进行很好的解析。
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-07 10:17
由 eexpress
何谓解析?
指语法高亮?
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-07 10:49
由 firestone
比如智能跳转,和semantic-ia.......有关的。
我发现对同一个文件中定义的宏函数什么的还能有效跳转,但是如果我include其他头文件中定义的宏,总是不能有效跳转。目前我只有跳转到对应的头文件当中,然后看其中的宏是如何定义的。
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-07 16:24
由 tangboyun
宏就是宏,函数就是函数
那啥,你的意思是指?
是识别用#if之类条件预处理指令括起来的代码部分么?
理论上要做到,好像挺容易的 ,就是生成一个源代码的tmp buffer,然后去调用cpp预处理器,最后再解析一次,得到跳转的位置。不过估计是很难做到“通用”,还有就是如何取得这类条件跳转定义的常数,这些可以是编译时命令行定义的,也可能是编译器内部定义的。
自己针对自己需要的特定情况hack下,配合正则之类写个跳转函数不难,不过要做到那种标准插件的通用性的话,不太现实。。。
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-07 16:29
由 firestone
我的意思是说有些函数用宏定义的方式,发现emacs找不到
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-07 16:37
由 tangboyun
最后问题还是归结到预处理器上啊,现有的插件不支持的话,解决思路就在上面了。。
不过我还是不清楚,你到底要实现的是啥功能?
是跳转到光标所在位置符号的定义么?这个好像比较简单,就不需要预处理器或者临时buffer之类的。
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
发表于 : 2011-04-18 2:51
由 tangboyun
刚才翻了下cedet的代码的时候发现,楼主提的问题,其实只要设定下面这个变量,让sematic去调用cpp即可,不过只能一个一个去设,比较大的库可以解决问题,比如boost或者Qt4这种,其他自己写的小头文件的话,还是算了。
semantic-lex-c-preprocessor-symbol-file