В C ++ это:
#ifdef A && B
такой же как:
#if defined(A) && defined(B)
?
Я думал, что это не так, но я не смог найти разницы с моим компилятором (VS2005).
c++
c-preprocessor
conditional-compilation
Criddell
источник
источник
Ответы:
Они не то же самое. Первый не работает (тестировал в gcc 4.4.1). Сообщение об ошибке было:
Если вы хотите проверить, определено ли несколько вещей, используйте второй.
источник
Условная компиляция
источник
Следующие результаты такие же:
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)
подробнее здесь
источник