`#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 中使用,所以不,这是不可能的。您显示的第一个代码是正确的解决方案。
我只找到了 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 中使用,所以不,这是不可能的。您显示的第一个代码是正确的解决方案。