Строго говоря, компилятор никогда не видит константы, объявленные с помощью директивы препроцессора #define
. Они обрабатываются текстовой подстановкой препроцессором . У них нет «типов» в смысле C ++, поскольку препроцессор ничего не знает о семантике языка C ++.
Препроцессор использует простую стратегию подстановки текста для разрешения макросов. Например, в следующем коде:
#define FIVE 5
int a = FIVE;
компилятор увидит только:
int a = 5;
Символ FIVE
удален из источника, который видит компилятор. Ваш компилятор будет иметь возможность запускать только препроцессор; в GCC это -E
, а в MSVC это /E
или /P
. Используя такую опцию, вы можете запустить ваш источник через препроцессор, чтобы увидеть, как он изменяется.