我有以下預處理器divective:的#define TRACE(...)不工作在C++
#ifndef NDEBUG
#define TRACE printf
#else
#define TRACE(...)
#endif
和使用例子是:
TRACE("TRACE: some parameter = %i\n", param);
在C中的所有工作得很好當我建立這兩個調試和發佈版本,但在C++編譯器發出以下內容:
警告:無效字符在宏參數名
錯誤:'#define'中的參數列表嚴重中斷
並將這些警告和錯誤指向'TRACE(...)'指令。
如何正確寫入C++?
問題是編譯器總是要評估參數。如果他們昂貴,你想讓他們關閉。因此TRACE類型的宏通常應該評估爲在釋放模式下清空代碼。 – 2008-10-03 14:36:47