看板 Programming 關於我們 聯絡資訊
: #ifdef _DEBUG /* ... 省略 ... */ : #else : static void __dbg_printf (const char * format,...) {} : #define DBG 1?((void)(NULL)):__dbg_printf : #endif : 看得出來它讓 _DEBUG 沒定義時,程式中呼叫的 DBG 就完全不做任何事 : 可是為什麼還要特地寫成一個 conditional expression,而且還是絕對成立的 : 這樣有什麼特別用意嗎? : (畢竟此時直接呼叫空白定義版的 __dbg_printf 就已經達到不做事的目的了) #define DBG 1?((void)(NULL)):__dbg_printf 這一行是為了配合文法的正確,防止編譯錯誤發生。 試想DBG的用法,Ex: GDB("this is debug string %c\n", 'A'); 套入GDB的定義變成: 1?((void)(NULL)):__dbg_printf("this is debug string %c\n", 'A'); 以更明白的敘述: if (1) { (void)(NULL); } else { __dbg_printf("this is debug string %c\n", 'A'); } 這在文法上是成立的。 若GDB的定義改為: #define DBG ((void)(NULL)) 以上例,則變成: ((void)(NULL))("this is debug string %c\n", 'A'); /* 錯誤敘述 */ implement空的Debug function方法有好幾種,這是其中一種。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.175.134