3
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4)
#define MEMCACHED_COMMAND_GET_ENABLED() (0)
上面的宏似乎完全沒用,它們可以用於什麼?下面的宏可用於什麼?
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4)
#define MEMCACHED_COMMAND_GET_ENABLED() (0)
上面的宏似乎完全沒用,它們可以用於什麼?下面的宏可用於什麼?
這些宏可能有幾種定義,您將根據編譯標誌選擇一個或另一個。 這使得實例調試信息僅在內置調試模式時才提供。
例如,在memcached_dtrace.h
,有一樣的東西:
#if ENABLE_DTRACE
...
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2) \
__dtrace_memcached___command__get(arg0, arg1, arg2)
#define MEMCACHED_COMMAND_GET_ENABLED() \
__dtraceenabled_memcached___command__get()
...
#else
...
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2)
#define MEMCACHED_COMMAND_GET_ENABLED() (0)
...
#endif
這些命令只有當ENABLE_DTRACE
在編譯的時候被激活,做一些事情。
空的宏擴展爲空行,它們被編譯爲空。當您在啓用調試標誌的情況下進行編譯時,將'LOG'宏定義爲'fprintf'的別名,或者在禁用調試標誌時將其展開爲空白,這也是將日誌消息包含在代碼中的常用方式。瞧,沒有調試信息,並在運行時不放慢,以確定是否打印它們。 – Jonathan 2011-03-31 15:15:33
['assert()'](http://pubs.opengroup.org/onlinepubs/007908799/xsh/assert.h.html)是這種行爲的另一個常見例子。 – 2011-03-31 16:25:42