我可以在为 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)); \
}
关于c++ - C/C++ 条件宏组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20347006/