-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_\
}

上記の 3 つのコードのマクロ関数をエラーなしで記述する方法を教えてください。

同じコードにインライン関数を使用しましたが、デバッグ中にインライン関数がインライン関数として扱われていないことがわかったので、この場合はマクロ関数を使用したいと思います。

私が使用したインライン関数は以下のとおりでした:-

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 に答える