消除障眼法-一個(gè)編譯錯(cuò)誤
一段代:
if(0== nRet)
CM_INFO_TRACE_THIS("successfull");
else
CM_INFO_TRACE_THIS("fail");
看起來(lái)上面沒(méi)有任何錯(cuò)誤,我開(kāi)始懷疑我的眼睛被使了障眼法,其實(shí)沒(méi)有什么障眼法,問(wèn)題在于CM_INFO_TRACE_THIS這個(gè)宏;看一下:
#define CM_INFO_TRACE_THIS(str) {TRACE(str);}
這個(gè)就是宏定義的毛??;記得一個(gè)朋友也提過(guò),可以用do...while來(lái)終結(jié)這種問(wèn)題,如:
#define CM_INFO_TRACE_THIS(str) do{TRACE(str);}while(0)
雖然在宏的后面多了一個(gè)分號(hào),但這剛好是while的結(jié)束。
對(duì)于宏后面不喜歡加分號(hào)的人,編譯器提示:缺少分號(hào),很容易發(fā)現(xiàn)錯(cuò)誤,不再以為是什么障眼法了。
posted on 2007-07-18 15:43 笨笨 閱讀(1368) 評(píng)論(4) 編輯 收藏 引用 所屬分類: 調(diào)試

