当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-07 10:16 

注册: 2008-07-21 10:02
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
我主要进行c和c++编程,比如在头文件定义了一些宏,发现在进行跳转的时候emacs无法对宏定义的函数进行有效解析,大家有没有好方法能处理?我用过eclipse,发现它对宏能进行很好的解析。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-07 10:17 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
何谓解析?

指语法高亮?


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-07 10:49 

注册: 2008-07-21 10:02
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
比如智能跳转,和semantic-ia.......有关的。
我发现对同一个文件中定义的宏函数什么的还能有效跳转,但是如果我include其他头文件中定义的宏,总是不能有效跳转。目前我只有跳转到对应的头文件当中,然后看其中的宏是如何定义的。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-07 16:24 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
宏就是宏,函数就是函数
那啥,你的意思是指?
是识别用#if之类条件预处理指令括起来的代码部分么?

理论上要做到,好像挺容易的 ,就是生成一个源代码的tmp buffer,然后去调用cpp预处理器,最后再解析一次,得到跳转的位置。不过估计是很难做到“通用”,还有就是如何取得这类条件跳转定义的常数,这些可以是编译时命令行定义的,也可能是编译器内部定义的。

自己针对自己需要的特定情况hack下,配合正则之类写个跳转函数不难,不过要做到那种标准插件的通用性的话,不太现实。。。


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


最后由 tangboyun 编辑于 2011-04-07 16:31,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 : Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-07 16:29 

注册: 2008-07-21 10:02
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
我的意思是说有些函数用宏定义的方式,发现emacs找不到


页首
 用户资料  
 
6 楼 
 文章标题 : Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-07 16:37 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
最后问题还是归结到预处理器上啊,现有的插件不支持的话,解决思路就在上面了。。

不过我还是不清楚,你到底要实现的是啥功能?
是跳转到光标所在位置符号的定义么?这个好像比较简单,就不需要预处理器或者临时buffer之类的。


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: emacs不能对程序中的宏进行有效解析,大家怎么处理的?
帖子发表于 : 2011-04-18 2:51 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
刚才翻了下cedet的代码的时候发现,楼主提的问题,其实只要设定下面这个变量,让sematic去调用cpp即可,不过只能一个一个去设,比较大的库可以解决问题,比如boost或者Qt4这种,其他自己写的小头文件的话,还是算了。
semantic-lex-c-preprocessor-symbol-file


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译