织梦CMS - 轻松建站从此开始!

罗索

设置SourceInsight的condition解决代码语法解析错误的问题

jackyhwei 发布于 2010-06-11 17:55 点击:次 
今天使用SourceInsight的时候遇到一个很郁闷的问题,明明存在的函数,source insight就是找不到
TAG:

今天使用SourceInsight的时候遇到一个很郁闷的问题,明明存在的函数,source insight就是找不到,仔细看了一下,发现原因如下: 类似下面的代码,在函数f1中,有一个#ifdef 的条件宏,在条件宏的两个分支中,都使用了大括号作为一段代码区间的起始括号:

  1. static void f1 () 
  2.        Some code ; 
  3. #ifdef MACRO1 
  4.        if( some judge ){ 
  5. #else 
  6.        if( other judge ){ 
  7. #endif 
  8.                      Somecode; 
  9.        } // source insight 将这个括号与第二个if匹配上了 
  10.        Some more code; 
  11. // source insight 将这个括号与第一个if匹配上了 
  12.   
  13. Static void f2() 
  14.        … 
  15.   
  16. Static void f3() 
  17.        … 

结果,Sourceinsight在解析的时候,在语法匹配时,将宏的两个分支里的大括号都统计上了,于是在反括号的匹配过程中,无形中,就使得反括号少了一个,结果导致到了函数f1的结尾处的反括号,source insight还是认为函数没有结束,于是使得下面的 f2 和f3 被认为属于f1的一部分,于是在看代码的时候,source insight 就不认为存在f2 f3这两个函数了。

 
这个,真的有些郁闷,不知道会有多少种类似的情况导致代码不能被正确解析。影响甚至误导了程序的阅读理解。
 
仔细看了source insight的用户手册,发现有个办法可以亡羊补牢事后解决这个问题。
 
在Options > Preferences: Language 里面可以设置condition, 所谓condition基本上就是设置标识符及其值。例如上面的例子,可以添加一个名为MACRO1的标识符,并设置其值为1。这样,source insight在代码解析的过程中,就会按照condition来解析或忽略对应的代码。、
 
于是设置过这个condition以后,source insight就能正确匹配上述代码中的大括号了,问题解决。不知道有没有更灵活的解决办法。
 
由于被忽略的代码会以灰色显示,所以可以顺便把代码中你能确定的宏的值添加上,方便阅读代码,直观的判断有效代码。
 
(Raymond)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201006/9633.html]
本文出处:CSDN博客 作者:Raymond
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容