#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 条件放在宏定义中。