一段代:
if(0== nRet)
CM_INFO_TRACE_THIS("successfull");
else
CM_INFO_TRACE_THIS("fail");

編譯出錯(cuò),提示:else沒有匹配的if。
看起來(lái)上面沒有任何錯(cuò)誤,我開始懷疑我的眼睛被使了障眼法,其實(shí)沒有什么障眼法,問題在于CM_INFO_TRACE_THIS這個(gè)宏;看一下:
#define CM_INFO_TRACE_THIS(str) {TRACE(str);}

這樣就可以很顯然看出問題了,確實(shí)else是沒有匹配的if,因?yàn)閕f語(yǔ)句已經(jīng)結(jié)束了。
這個(gè)就是宏定義的毛??;記得一個(gè)朋友也提過,可以用do...while來(lái)終結(jié)這種問題,如:
#define CM_INFO_TRACE_THIS(str) do{TRACE(str);}while(0)

那么現(xiàn)在發(fā)生什么變化了?
雖然在宏的后面多了一個(gè)分號(hào),但這剛好是while的結(jié)束。
對(duì)于宏后面不喜歡加分號(hào)的人,編譯器提示:缺少分號(hào),很容易發(fā)現(xiàn)錯(cuò)誤,不再以為是什么障眼法了。