我有一个用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/

10-13 08:19
查看更多