#define 如何知道何时停止查找?
How does #define know when to stop looking?
我在 C++ 中使用一个宏来切换是否编译日志记录:
#define MAYBE_LOG(msg)
#ifdef PRINT_MSGS
ALWAYS_LOG(msg)
#endif
#define
怎么知道结局在哪里? #endif
指的是 #ifdef
,而不是 #define
。
#define
在行尾结束(可以用最后的 \
扩展)
问题中的代码做了两件不同的事情:它定义了一个名为 MAYBE_LOG
的没有主体的宏,如果定义了 PRINT_MSGS
,它会使用一个名为 ALWAYS_LOG
的宏。如果这不是它应该做的,那么,是的,它需要改变。由于问题没有说明代码应该做什么,所以这只是一个猜测:
#ifdef PRINT_MSGS
#define MAYBE_LOG(msg) ALWAYS_LOG(msg)
#else
#define MAYBE_LOG(msg)
#endif
这样做的原因(而不是在每行上使用 \
来扩展宏定义是因为您不能将 #if
条件放在宏定义中。
我在 C++ 中使用一个宏来切换是否编译日志记录:
#define MAYBE_LOG(msg)
#ifdef PRINT_MSGS
ALWAYS_LOG(msg)
#endif
#define
怎么知道结局在哪里? #endif
指的是 #ifdef
,而不是 #define
。
#define
在行尾结束(可以用最后的 \
扩展)
问题中的代码做了两件不同的事情:它定义了一个名为 MAYBE_LOG
的没有主体的宏,如果定义了 PRINT_MSGS
,它会使用一个名为 ALWAYS_LOG
的宏。如果这不是它应该做的,那么,是的,它需要改变。由于问题没有说明代码应该做什么,所以这只是一个猜测:
#ifdef PRINT_MSGS
#define MAYBE_LOG(msg) ALWAYS_LOG(msg)
#else
#define MAYBE_LOG(msg)
#endif
这样做的原因(而不是在每行上使用 \
来扩展宏定义是因为您不能将 #if
条件放在宏定义中。