Директива препроцессора: #elif не определен?

Есть ли директива препроцессора, которая проверяет, не определена ли константа. Я знаю о директиве #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

person sazr    schedule 11.02.2013    source источник
comment
#elif not not defined CUSTOM_CALLBACK_3 не не определено?   -  person JustMaximumPower    schedule 11.02.2013
comment
Что ты пытаешься сделать? Вы не можете определить макросы, которые содержат другие директивы препроцессора. Вы не можете сделать #define или #if или #elif частью макроса. Ваш макрос должен быть переработан, чтобы убедиться, что он не имеет внутреннего ветвления. Все макроветвления должны выполняться снаружи. Его нельзя встроить в макрос.   -  person AnT    schedule 11.02.2013


Ответы (1)


Как насчет

#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)
    //.....
person Luchian Grigore    schedule 11.02.2013