2013-02-11 200 views
3

是否有預處理程序指令檢查是否未定義常量。我知道#ifndef指令,但我也在尋找#elif not defined指令。 #elif not defined是否存在?預處理器指令:#elif未定義?

這是我會怎麼使用它:

#define REGISTER_CUSTOM_CALLBACK_FUNCTION(callbackFunctName) \ 
    #ifndef CUSTOM_CALLBACK_1 \ 
     #define CUSTOM_CALLBACK_1 \ 
     FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) \ 
    #elif not defined CUSTOM_CALLBACK_2 \ 
     #define CUSTOM_CALLBACK_2 \ 
     FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) \ 
    #elif not not defined CUSTOM_CALLBACK_3 \ 
     #define CUSTOM_CALLBACK_3 \ 
     FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) \ 
    #endif 
+0

爲什麼不使用ifndef? – Dariusz 2013-02-11 08:30:14

+0

'#elif未定義CUSTOM_CALLBACK_3'未定義? – JustMaximumPower 2013-02-11 08:30:26

+0

你想做什麼?您不能定義包含其他預處理器指令的宏。你不能使'#define'或'#if'或'#elif'成爲宏的一部分。您的宏必須重新設計,以確保它沒有內部「分支」。所有宏觀分支都必須在「外部」完成。它不能被「嵌入」到宏中。 – AnT 2013-02-11 08:33:47

回答

12

怎麼樣

#elif !defined(...) 

但你有更大的問題 - 後\排除其他指令 - 或者說讓他們非法。所以,即使使用有效的語法,你的定義也不會做你想要的。

您需要在條件內移動初始定義。

#ifndef CUSTOM_CALLBACK_1 
    #define CUSTOM_CALLBACK_1 
    #define REGISTER_CUSTOM_CALLBACK_FUNCTION(callbackFunctName) \ 
    FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) 
#elif !defined(CUSTOM_CALLBACK_2) 
    //.....