预处理器指令:#elif未定义?

时间:2013-02-11 08:28:23

标签: c-preprocessor preprocessor-directive

是否有预处理程序指令检查是否未定义常量。我知道#ifndef指令,但我也在寻找#elif not defined指令。 #elif not defined是否存在?

我将如何使用它:

#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

1 个答案:

答案 0 :(得分:13)

怎么样?
#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)
    //.....