Символические константы: как они хранятся и каковы их типы? - PullRequest
1 голос
/ 11 октября 2009

C ++ позволяет использовать директиву препроцессора #define для определения символических констант, которые компилятор заменит перед компиляцией. Мой вопрос: как компиляторы обычно хранят их внутри и имеют ли они типы данных?

1 Ответ

6 голосов
/ 11 октября 2009

Строго говоря, компилятор никогда не видит константы, объявленные с помощью директивы препроцессора #define. Они обрабатываются текстовой подстановкой препроцессором . У них нет «типов» в смысле C ++, поскольку препроцессор ничего не знает о семантике языка C ++.

Препроцессор использует простую стратегию подстановки текста для разрешения макросов. Например, в следующем коде:

#define FIVE 5

int a = FIVE;

компилятор увидит только:

int a = 5;

Символ FIVE удален из источника, который видит компилятор. Ваш компилятор будет иметь возможность запускать только препроцессор; в GCC это -E, а в MSVC это /E или /P. Используя такую ​​опцию, вы можете запустить ваш источник через препроцессор, чтобы увидеть, как он изменяется.

...