下面的宏可以用于什么?

mys*_*_go 4 c macros

#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4)
#define MEMCACHED_COMMAND_GET_ENABLED() (0)
Run Code Online (Sandbox Code Playgroud)

上面的宏似乎完全没用,它们可以用于什么?

ton*_*nio 11

这些宏可能有几种定义,您将根据编译标志选择一种或另一种.这使得例如仅在内置调试模式时提供调试信息.

例如,在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
Run Code Online (Sandbox Code Playgroud)

这些命令仅ENABLE_DTRACE在构建时激活时执行某些操作.

  • 空宏扩展为空行,这些行被编译为空.通过在启用调试标志的情况下将`LOG`宏定义为`fprintf`的别名,或者在禁用调试标志时将其扩展为空,这也是一种在代码中包含日志消息的流行方法.Voila,没有调试消息,并且在运行时没有减速以确定是否打印它们. (2认同)