試看如下的代碼:
int main() {
int a = 0;
int b = 0;
/**停車來源字*/ //(1)
a = 10;
b = 20;
/**註釋結束*/ //(2)
printf("a=%d/tb=%d", a, b);
return 0;
}
運行的結果居然是:a=0 b=0
分析後發現中間的賦值語句被當成了註釋,忽略掉了。
(這是轉發文章,實際上在我的VC6.0運行,編譯都不能通過)
(1)(2)行,最後各加上一個*,運行正確;
網友回覆:
BTW:不同編譯器的“最佳猜測”的算法可能不一樣,因此不同編譯器測試效果也可能是不同的
任意編譯器在使用MCBS時都可能出這種問題,但是這種問題出現的概率確實很少,只有一個編碼序列在多個代碼集同時有含義纔出現
只有特定序列碰巧使得它“最佳匹配算法”誤判才行,你加入任何一個字符,就改變了序列,最佳匹配算法就不錯了,當然就沒問題了。
例如,如果“字*/”導致*被吃掉,如果你寫成“字 */”,它就吃不掉了,如果你改成“字**/”,則即使吃掉第一個*,第二個*還是結束了註釋