2014-03-05 89 views
0

我必須將日誌記錄添加到特定模塊,該模塊應允許我在需要時啓用和禁用日誌記錄。我添加了幾個#defines來做到這一點。下面如何比較分配給C++中的#define的布爾值

#define PAINT_LOG_ENABLED true 

#if PAINT_LOG_ENABLED == true 

    #define PAINT_LOG_EXTENSIVELY true 

    #if PAINT_LOG_EXTENSIVELY == true 
     #define PAINT_LOG_FILE_NAME  TEXT("paint-log-ex.log") 
    #else 
     #define PAINT_LOG_FILE_NAME  TEXT("paint-log.log") 
    #endif 

#endif 

代碼給定,但是,這將引發我一個錯誤說 致命錯誤C1017:無效的整數常量表達式

上面的代碼工作當我使用1和0,而不是真假。 請幫忙。

+0

似乎工作 - http://ideone.com/pF6t5a你怎麼使用宏? –

回答

0

gcc編譯它。我猜測它可能與MSVC預處理器有關。

不過,我會建議反對,你可以很容易地 避免使用C預寫東西喜歡用定義如果可能的話,在這種情況下:

const bool PAINT_LOG_ENABLED = true; 
const bool PAINT_LOG_EXTENSIVELY = PAINT_LOG_ENABLED; 
const char* PAINT_LOG_FILE_NAME = PAINT_LOG_EXTENSIVELY ? "paint-log-ex.log" : "paint-log.log"; 
+0

請注意,如果知道if的結果,現代編譯器將消除if(及其內容)。 –

2

C++預處理器可以測試定義的價值的存在。您不需要使用true。取而代之的

#define PAINT_LOG_ENABLED true 

#if PAINT_LOG_ENABLED == true 

可以簡單的寫

#define PAINT_LOG_ENABLED 

#if PAINT_LOG_ENABLED