本文共 1032 字,大约阅读时间需要 3 分钟。
设置 SourceInsight 的 condition 解决代码语法解析错误的问题 今天使用SourceInsight的时候遇到一个很郁闷的问题,明明存在的函数,source insight就是找不到,仔细看了一下,发现原因如下: 类似下面的代码,在函数f1中,有一个#ifdef 的条件宏,在条件宏的两个分支中,都使用了大括号作为一段代码区间的起始括号:
} // source insight 将这个括号与第二个if匹配上了
} // source insight 将这个括号与第一个if匹配上了
结果,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就能正确匹配上述代码中的大括号了,问题解决。不知道有没有更灵活的解决办法。
由于被忽略的代码会以灰色显示,所以可以顺便把代码中你能确定的宏的值添加上,方便阅读代码,直观的判断有效代码。