В C ++ это:
#ifdef A && B
такой же как:
#if defined(A) && defined(B)
?
Я думал, что это не так, но я не смог найти разницы с моим компилятором (VS2005).
В C ++ это:
#ifdef A && B
такой же как:
#if defined(A) && defined(B)
?
Я думал, что это не так, но я не смог найти разницы с моим компилятором (VS2005).
Ответы:
Они не то же самое. Первый не работает (тестировал в 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
#else
, могут вызвать проблему. Только первый вариант означает именно то, о чем просил спрашивающий.
Для тех, кто может искать, например (UNIX / g ++), который немного отличается от OP, это может помочь:
`
#if(defined A && defined B && defined C)
const string foo = "xyz";
#else
#if(defined A && defined B)
const string foo = "xy";
#else
#if(defined A && defined C)
const string foo = "xz";
#else
#ifdef A
const string foo = "x";
#endif
#endif
#endif
#endif
По состоянию на VS2015 ничего из вышеперечисленного не работает. Правильная директива:
#if (MAX && !MIN)
подробнее здесь