我有一个用C++编写的日志系统,上面写有这种类型的函数:
void processMessages();
void DEBUG_MSG(const std::string& appender,const char* msg, ...);
void INFO_MSG(const std::string& appender,const char* msg, ...);
void WARNING_MSG(const std::string& appender, const char* msg, ...);
void ERROR_MSG(const std::string& appender, const char* msg, ...);
void FATAL_MSG(const std::string& appender, const char* msg, ...);
我想通过C++中的宏禁用。
我读过这个主题:Disable functions using MACROS但是
#ifdef GLOG_SILENCE
#define processMessages (void)sizeof
#define DEBUG_MSG (void)sizeof
#define INFO_MSG (void)sizeof
#define WARNING_MSG (void)sizeof
#define ERROR_MSG (void)sizeof
#define FATAL_MSG (void)sizeof
#else //GLOG_SILENCE
void processMessages();
void DEBUG_MSG(const std::string& appender,const char* msg, ...);
void INFO_MSG(const std::string& appender,const char* msg, ...);
void WARNING_MSG(const std::string& appender, const char* msg, ...);
void ERROR_MSG(const std::string& appender, const char* msg, ...);
void FATAL_MSG(const std::string& appender, const char* msg, ...);
#endif //GLOG_SILENCE
不能正常工作。我不断收到类似的错误:
我怀疑问题与Log是一类有关,但是我不知道该怎么做。
一些帮助?
最佳答案
的确,如果这些是成员函数,那么“无声”版本将扩展为废话:
log.(void)sizeof(stuff);
您可以定义一个不执行任何操作的成员函数,以及可吞噬其参数的宏:
void nothing() {}
#define processMessages(...) nothing()
然后使用“静默”版本将给出有效的代码,该代码应无任何编译:
log.nothing();
这样做的缺点是:(a)您依靠编译器内联空函数,而不生成函数调用; (b)在静默模式下编译时,不检查参数的语法。
关于c++ - 使用预处理器宏取消定义函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10226151/