Re: [問題] 請問BCB在有form的情況下
: #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
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章