Jas*_*enX 38 c++ c-preprocessor
可能重复:
#ifff在#define中
如何在宏内成功使用"#"字符?当我做那样的事情时,它会尖叫:
#define DO(WHAT) \
#ifdef DEBUG \
MyObj->WHAT() \
#endif \
Run Code Online (Sandbox Code Playgroud)
Rog*_*mbe 52
你不能这样做.你必须做这样的事情:
#ifdef DEBUG
#define DO(WHAT) MyObj->WHAT()
#else
#define DO(WHAT) do { } while(0)
#endif
Run Code Online (Sandbox Code Playgroud)
在do { } while(0)
避免了空语句.例如,请参阅此问题.
Oli*_*rth 10
它尖叫,因为你不能那样做.
我建议以下作为替代方案:
#ifdef DEBUG
#define DO(WHAT) MyObj->WHAT()
#else
#define DO(WHAT)
#endif
Run Code Online (Sandbox Code Playgroud)
看来你想做的事情可以这样实现,不会遇到任何问题:
#ifdef DEBUG
# define DO(WHAT) MyObj->WHAT()
#else
# define DO(WHAT) while(false)
#endif
Run Code Online (Sandbox Code Playgroud)
顺便说一句,最好使用NDEBUG
宏,除非你有更具体的理由不这样做。NDEBUG
更广泛地用作意味着无需调试的宏。例如,assert
可以通过定义禁用标准宏NDEBUG
。你的代码将变成:
#ifndef NDEBUG
# define DO(WHAT) MyObj->WHAT()
#else
# define DO(WHAT) while(false)
#endif
Run Code Online (Sandbox Code Playgroud)