现在的位置: 首页 > 综合 > 正文

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

2012年12月11日 ⁄ 综合 ⁄ 共 1076字 ⁄ 字号 评论关闭
 

设置SourceInsightcondition解决代码语法解析错误的问题
 
作者:刘旭晖 Raymond转载请注明出处
 
今天使用SourceInsight的时候遇到一个很郁闷的问题,明明存在的函数,source insight就是找不到,仔细看了一下,发现原因如下: 类似下面的代码,在函数f1中,有一个#ifdef 的条件宏,在条件宏的两个分支中,都使用了大括号作为一段代码区间的起始括号:
 
static void f1 ()
{
       Some code ;
 
#ifdef MACRO1
       if( some judge ){
#else
       if( other judge ){
#endif
                     Somecode;
       } // source insight 将这个括号与第二个if匹配上了
       Some more code;
} // source insight 将这个括号与第一个if匹配上了
 
Static void f2()
{
       …
}
 
Static void f3()
{
       …
}
 
 
结果,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就能正确匹配上述代码中的大括号了,问题解决。不知道有没有更灵活的解决办法。
 
由于被忽略的代码会以灰色显示,所以可以顺便把代码中你能确定的宏的值添加上,方便阅读代码,直观的判断有效代码。
 
【上篇】
【下篇】

抱歉!评论已关闭.