2013-02-11 3 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

+0

'#elif не определен CUSTOM_CALLBACK_3' не определен? – JustMaximumPower

+0

Что вы пытаетесь сделать? Вы не можете определить макросы, которые содержат другие директивы препроцессора. Вы не можете сделать '# define' или' # if' или '# elif' частью макроса. Ваш макрос должен быть изменен, чтобы убедиться, что он не имеет внутреннего «разветвления». Все макроразветвления должны выполняться «снаружи». Он не может быть «встроен» в макрос. – AnT

ответ

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) 
    //.....