Boolean в условной: это "директиву#ifdef А && Б" совпадает "#если определен(а) && определенными(Б)"?
В C++, это:
#ifdef A && B
то же, что:
#if defined(A) && defined(B)
?
Я думал, что это не так, но я не смог найти разницу с моим компилятором (VS2005).
5 ответов:
Они не то же самое. Первый не работает (я тестировал в gcc 4.4.1). Сообщение об ошибке было:
test. cc: 1: 15: предупреждение: дополнительные жетоны на конец директивы #ifdef
Если вы хотите проверить, если несколько вещей определены, используйте второй.
вы можете использовать определенный оператор в директива #if для использования выражений что оценить в 0 или 1 в строки препроцессора. Это спасает вас от использование вложенных директив предварительной обработки. Круглые скобки вокруг идентификатора быть необязательным. Например:
#if defined (MAX) && ! defined (MIN)
без использования определенного оператора, вы должны были бы включить следующие две директивы для выполнения вышеупомянутое пример:
#ifdef max #ifndef min
следующие результаты одинаковы:
1.
#define A #define B #if(defined A && defined B) printf("define test"); #endif
2.
#ifdef A #ifdef B printf("define test"); #endif #endif
по состоянию на VS2015 ни одна из вышеперечисленных работ. Правильная директива:
#if (MAX && !MIN)
посмотреть подробнее здесь
Я думаю, может быть, ОП хочет спросить о положении "#if COND_A & & COND_B", а не"#ifdef COND_A && COND_B"...
Они тоже разные. "#if COND_A & & COND_B " может судить логику express, просто так:
#if 5+1==6 && 1+1==2 .... #endif
даже, переменная в вашем коде также может быть использована в этом макросе statment:
int a = 1; #if a==1 ... #endif