Манипуляции с макросами

Есть вот такой простой блок кода, который печатает 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

→ Ссылка