[英]C/C++ conditional macros combining
在为C或C ++编写代码时,我可以组合宏吗? 如果没有,为什么? 如果有,怎么样?
我对如何解决以下问题感兴趣(不正确且不编译!!!)的想法:
#define FREE(x) if((x)) { \
#ifdef MEM_DEBUG_ \
fprintf(stderr, "free:%p (%s:%d)\n", (x), __FILE__, __LINE__); \
#endif \
free((x)); }
所以,我想要实现的是:
我想定义宏FREE
,如果我定义了MEM_DEBUG
,它将包含一个额外的行。
我知道,为了解决这个问题,我可以基于MEM_DEBUG
为FREE
提供两个定义,例如:
#ifdef MEM_DEBUG
#define FREE() something
#else
#define FREE() something else
#endif
但我只是好奇,如果有另一种方式!
是的,你可以定义宏来封装设置标志时做某事的想法。
#ifdef MEM_DEBUG
# define IF_MEM_DEBUG( ... ) __VA_ARGS__
# define IF_MEM_NDEBUG( ... )
#else
# define IF_MEM_DEBUG( ... )
# define IF_MEM_NDEBUG( ... ) __VA_ARGS__
#endif
#define FREE(x) \
if((x)) { \
IF_MEM_DEBUG( \
fprintf(stderr, "free:%p (%s:%d)\n", (x), __FILE__, __LINE__); \
) \
free((x)); \
}
不,不可能在宏定义中放置预处理指令(以#
开头的行)。 所以你唯一能做的就是你提到的第二种方法 - 将定义放在条件中。
当然,如果你正在处理一个更大的宏,并且只有一部分是#if
-dependent,你可以将依赖部分隔离成一个单独的宏,并在较大的宏中使用它,以保持不同的定义尽可能小。可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.