-2

我应该如何使用宏函数编写以下代码?

#ifdef LOG_ENABLED      
    m_logger->Log(szType,szMessage);
#endif

我做了类似下面提到的事情,它导致了错误:-

#define _LOG_MSG_CND_BEGIN_ #ifdef LOG_ENABLED
#define _LOG_MSG_CND_END_ #endif
#define WriteLogMessage(szType,szMessage) \
{\
_LOG_MSG_CND_BEGIN_\
    m_logger->Log(szType,szMessage);\
_LOG_MSG_CND_END_\
}

请让我知道如何为上述三段代码编写宏函数而没有任何错误。

我对同一段代码使用了内联函数,但是在调试时我看到内联函数没有被视为内联函数,所以我想在这种情况下使用宏函数。

我使用的内联函数如下所述:-

inline void WriteLogMessage(LOG_LEVEL szType, LPCTSTR szMessage){
#ifdef LOG_ENABLED      
    m_logger->Log(szType,szMessage);
#endif
}
4

2 回答 2

3

标准的 C 预处理器有点笨,根本不懂。你想要这样的东西:

#if defined LOG_ENABLED
#define WriteLogMessage(szType,szMessage) m_logger->Log(szType,szMessage)
#else
#define WriteLogMessage(szType,szMessage)
#endif
于 2012-05-17T12:11:01.833 回答
0

预处理器指令必须是一行中的第一件事:

#define _LOG_MSG_CND_BEGIN_ 
#ifdef LOG_ENABLED
#define _LOG_MSG_CND_END_ 
#endif
#define WriteLogMessage(szType,szMessage) \
{\
_LOG_MSG_CND_BEGIN_\
    m_logger->Log(szType,szMessage);\
_LOG_MSG_CND_END_\
}

编辑:如果您希望将宏扩展到其他宏,那是不可能的。

于 2012-05-17T12:08:23.990 回答