emacs不能对程序中的宏进行有效解析,大家怎么处理的?
-
- 帖子: 31
- 注册时间: 2008-07-21 10:02
emacs不能对程序中的宏进行有效解析,大家怎么处理的?
我主要进行c和c++编程,比如在头文件定义了一些宏,发现在进行跳转的时候emacs无法对宏定义的函数进行有效解析,大家有没有好方法能处理?我用过eclipse,发现它对宏能进行很好的解析。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 31
- 注册时间: 2008-07-21 10:02
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
比如智能跳转,和semantic-ia.......有关的。
我发现对同一个文件中定义的宏函数什么的还能有效跳转,但是如果我include其他头文件中定义的宏,总是不能有效跳转。目前我只有跳转到对应的头文件当中,然后看其中的宏是如何定义的。
我发现对同一个文件中定义的宏函数什么的还能有效跳转,但是如果我include其他头文件中定义的宏,总是不能有效跳转。目前我只有跳转到对应的头文件当中,然后看其中的宏是如何定义的。
- tangboyun
- 帖子: 701
- 注册时间: 2009-07-25 1:57
- 联系:
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
宏就是宏,函数就是函数
那啥,你的意思是指?
是识别用#if之类条件预处理指令括起来的代码部分么?
理论上要做到,好像挺容易的 ,就是生成一个源代码的tmp buffer,然后去调用cpp预处理器,最后再解析一次,得到跳转的位置。不过估计是很难做到“通用”,还有就是如何取得这类条件跳转定义的常数,这些可以是编译时命令行定义的,也可能是编译器内部定义的。
自己针对自己需要的特定情况hack下,配合正则之类写个跳转函数不难,不过要做到那种标准插件的通用性的话,不太现实。。。
那啥,你的意思是指?
是识别用#if之类条件预处理指令括起来的代码部分么?
理论上要做到,好像挺容易的 ,就是生成一个源代码的tmp buffer,然后去调用cpp预处理器,最后再解析一次,得到跳转的位置。不过估计是很难做到“通用”,还有就是如何取得这类条件跳转定义的常数,这些可以是编译时命令行定义的,也可能是编译器内部定义的。
自己针对自己需要的特定情况hack下,配合正则之类写个跳转函数不难,不过要做到那种标准插件的通用性的话,不太现实。。。
上次由 tangboyun 在 2011-04-07 16:31,总共编辑 1 次。
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
-
- 帖子: 31
- 注册时间: 2008-07-21 10:02
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
我的意思是说有些函数用宏定义的方式,发现emacs找不到
- tangboyun
- 帖子: 701
- 注册时间: 2009-07-25 1:57
- 联系:
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
最后问题还是归结到预处理器上啊,现有的插件不支持的话,解决思路就在上面了。。
不过我还是不清楚,你到底要实现的是啥功能?
是跳转到光标所在位置符号的定义么?这个好像比较简单,就不需要预处理器或者临时buffer之类的。
不过我还是不清楚,你到底要实现的是啥功能?
是跳转到光标所在位置符号的定义么?这个好像比较简单,就不需要预处理器或者临时buffer之类的。
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
- tangboyun
- 帖子: 701
- 注册时间: 2009-07-25 1:57
- 联系:
Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
刚才翻了下cedet的代码的时候发现,楼主提的问题,其实只要设定下面这个变量,让sematic去调用cpp即可,不过只能一个一个去设,比较大的库可以解决问题,比如boost或者Qt4这种,其他自己写的小头文件的话,还是算了。
semantic-lex-c-preprocessor-symbol-file
semantic-lex-c-preprocessor-symbol-file
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。