SI,Source Insight,閱讀代碼的利器,目前它的最新版本為3.50.0064。
SI的一個很有用的功能是可以列出所有的函數名和變量名,然而在Source Insight的工程中,偶爾會遇到那么一兩個文件,里面的函數名和變量名無法解析,提示“parse too complex”。難道這段程序真的復雜到SI都不認識了嗎?非也。這其中的罪魁禍首就是條件預編譯指令。
在一個Source Insight工程中,它里面所有的沒有確定數值的宏都被認為是有效的,那么對於類似#ifdef...#else...#endif這樣的分支結構,如果在#ifdef和#else這兩個分支分別寫一個大括號{,而在#endif之后寫上大括號的另一半},而這些大括號又都是有效的話,后果顯而易見:由於左半邊大括號多了一個,括號不配對,導致所有后邊的代碼被看作是該括號內部的內容,直到文件結束。。
示例代碼:
#ifdef COMPLEX
{
#else
{
#endif
}
解決辦法:在Options->Preferences->Languages->Conditional Parsing的設置處,在Project Specific Conditions中設置該宏為true、false還是忽略。當設置宏COMPLEX為true或false之后,上面示例的兩個左大括號就只有一個有效,代碼可以被正確解析了。