【发布时间】:2011-01-01 23:23:47
【问题描述】:
代码有以下几个部分:
int filter;
#ifdef INPUTFILTER_FOO
LOG4CXX_DEBUG(log, "FOO filter used");
filter = F_FOO;
#endif
它们在代码中多次使用(用于为所有测试配置提供 I/O、线程支持等),大约它们对于调试至关重要,但会使代码看起来很粗糙,想用宏替换它们,一个用于每个 category_type 命名空间。
所以,想展开以下内容:
MACROSTUFFBAZ(log2, stuff, "BAZ")
到:
#ifdef INPUTSTUFF_BAZ
LOG4CXX_DEBUG(log2, "BAZ stuff used");
stuff = S_BAZ;
#endif
要定义宏,请计划使用:
debug.hpp:
#ifdef INPUTSTUFF_BAZ
#define MACROSTUFFBAZ ...
#else
#define MACROSTUFFBAZ
.. no code!
#endif
#endif
(至少这可以清楚地概述当前正在试用的东西,而不会在代码周围看到它们)
【问题讨论】:
-
你不清楚
filter = F_FOO和stuff = S_BAZ:什么时候是S_?什么时候F_?是否依赖于宏参数? -
@icecrime,它们只是另一个宏定义的值(文件名前缀、计数器、延迟等)。它们不依赖于参数,而是由宏定义。
标签: c++ macros c-preprocessor