Boolean в условной: это "директиву#ifdef А && Б" совпадает "#если определен(а) && определенными(Б)"?


В C++, это:

#ifdef A && B

то же, что:

#if defined(A) && defined(B)

?

Я думал, что это не так, но я не смог найти разницу с моим компилятором (VS2005).

5 70

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