Манипуляции с макросами
Есть вот такой простой блок кода, который печатает b, я что-то упускаю из вида, почему так происходит?
#include <iostream>
constexpr int STACKUSE = 1;
int main() {
#if STACKUSE == 1
std::cout << "a" << std::endl;
#else
std::cout << "b" << std::endl;
#endif
return 0;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Потому что препроцессор в переменных не разбирается.
Хотите получить a? Работайте через препроцессор...
#define STACKUSE 1
int main() {
#if STACKUSE == 1
std::cout << "a" << std::endl;
#else
std::cout << "b" << std::endl;
#endif
Если же вы хотите добиться того же с помощью компилятора, то писать надо так:
constexpr int STACKUSE = 1;
int main() {
if constexpr (STACKUSE == 1)
std::cout << "a" << std::endl;
else
std::cout << "b" << std::endl;
Автор решения: Bloody.cpp
→ Ссылка
Ваш код не работает по причине того, что препроцессор выполняет директивы ещё до всех переменных и исполнения кода. Ваш код компилируется только потому, что по умолчанию у препроцессора все не определённые макросы равны 0 (Не знаю как на других компиляторах, но у меня и у автора, судя по всему, это так). Препроцессор не видит никаких STACKUSE. Ему нужны макросы: #define STACKUSE 1