Директива #define
является директивой препроцессору , что означает, что она вызывается препроцессором еще до того, как что-либо скомпилировано.
Поэтому, если вы наберете:
#define NUMBER 100
А потом вы набираете:
int x = NUMBER;
То, что на самом деле ваш компилятор видит , просто:
int x = 100;
По сути, вы открыли свой исходный код в текстовом процессоре и выполнили поиск / замену, чтобы заменить каждое вхождение «NUMBER» на «100». Таким образом, ваш компилятор не имеет представления о существовании NUMBER
. Только препроцессор предварительной компиляции знает, что означает NUMBER
.
Итак, если вы попытаетесь получить адрес NUMBER
, компилятор подумает, что вы пытаетесь получить адрес целочисленной литеральной константы, которая недопустима.