`#ifdef` 可以在宏中使用吗?

Can `#ifdef` be used inside a macro?

我只找到了 this related question,这不是我要找的。

我曾经在 #ifdef 语句中定义宏:

#ifdef DEBUG
#   define PRINT_IF_DEBUGGING(format) printf(format);
#   define PRINTF_IF_DEBUGGING(format, ...) printf(format, __VA_ARGS__);
#else
#   define PRINT_IF_DEBUGGING(...)
#   define PRINTF_IF_DEBUGGING(...)
#endif

现在,我想做相反的事情,在宏中包含 #ifdef 语句。像这样:

#define PRINT_IF_DEBUGGING(format, ...) \
#if defined(DEBUG) print(format); #endif
#define PRINTF_IF_DEBUGGING(format, ...) \
#if defined(DEBUG) printf(format, __VA_ARGS__); #endif

但是,我在 #ifdef defined.

中使用 __VA_ARGS__ 时遇到问题
error: '#' is not followed by a macro parameter
 #define PRINT_IF_DEBUGGING(format, ...)
error: '#' is not followed by a macro parameter
 #define PRINTF_IF_DEBUGGING(format, ...)
warning: __VA_ARGS__ can only appear in the expansion of a C++11 variadic macro
 #if defined(DEBUG) printf(format, __VA_ARGS__); #endif

这可能吗?

这确实应该是一条评论,但我无法将其格式化为允许我说出我想说的话的方式,所以我改为回答。

无论如何,只要改变这个:

#if defined(DEBUG) print(format); #endif

对此:

#if defined(DEBUG)
    print(format);
#endif

等等,应该可以解决。

您不能在 #define#ifdef inside 中使用,所以不,这是不可能的。您显示的第一个代码是正确的解决方案。