为什么编译器会抱怨这个宏声明

spe*_*ncs 12 c debugging c-preprocessor

为了调试方便,我编写了以下宏

1 #ifndef DEF_H
2 #define DEF_H
3 #define DEBUG_MODE
4 #define DEBUG_INFO(message)     \
5         #ifdef DEBUG_MODE       \
6                 cout << message << endl; \
7         #endif                          \
8 #endif
Run Code Online (Sandbox Code Playgroud)

但gcc抱怨如下

def.h:4: error: '#' is not followed by a macro parameter
def.h:1: error: unterminated #ifndef
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?我在这里错过了一些重点吗?

Oli*_*rth 23

你不能#ifdef在宏定义中有s.你需要把它翻出来:

#ifdef DEBUG_MODE
#define DEBUG_INFO(message) cout << (message) << endl
#else
#define DEBUG_INFO(message)
#endif
Run Code Online (Sandbox Code Playgroud)