如何使用宏函数编写下面的代码?

时间:2012-05-17 12:06:43

标签: c++ macros inline

我应该如何使用宏功能编写下面的代码?

#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
}

2 个答案:

答案 0 :(得分:3)

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

#if defined LOG_ENABLED
#define WriteLogMessage(szType,szMessage) m_logger->Log(szType,szMessage)
#else
#define WriteLogMessage(szType,szMessage)
#endif

答案 1 :(得分: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_\
}

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