Как память выделяется макросам в c?

Я хотел бы знать, как память выделяется для #define переменных в C.

#define VAR1 10 

У меня есть 2 вопроса …

  1. Какой тип VAR1?
  2. В каком хранилище VAR1 хранится память?

VAR1 имеет ни типа, ни представления во время выполнения. Он распознается только препроцессором.

Итак, ответ Mu : на ваш вопрос нельзя ответить, потому что он основан на неправильных предположениях.

В каком хранилище VAR1 хранится память?

Ни в одном из сегментов.

VAR1 имеет значение только на этапе предварительной обработки и не имеет идентификатора во время выполнения. Во время предварительной обработки все экземпляры VAR1 заменяются на 10 поэтому во время выполнения нет требования к памяти, потому что 10 является целым литералом.

Какой тип VAR1?

VAR1 заменяется на 10 на стадии предварительной обработки. 10integer literal , мы можем сказать, что тип или VAR1 является int .


Мораль: macros не являются переменными.

Насколько я понимаю, определение с помощью макроса не имеет типа или явно выделяет память; правая часть определения ( 10 в этом случае) VAR1 разложена в любом случае левой стороны ( VAR1 в этом случае) до компиляции.

Macros not variables являются not variables . Это просто общее имя для какой-то ценности. В вашем случае VAR1 соответствует integer значению 10 .

Макрос не хранится нигде в памяти. Когда мы скомпилируем программу на C или C ++, это делается на многих этапах. Во-первых, синтаксис проверяется. Если синтаксис верен, он проверяется на семантические ошибки. Если он проходит, файл программы .c преобразуется в Object code . Во время этого преобразования препроцессоры обрабатываются, т. VAR1 файлы заголовков, включается любой внешний связанный файл и all the macro are replaced with their corresponding values (в вашем случае в любом месте программа находит VAR1 , она заменяет значение со значением 10 ).

После этого этапа весь код уже был преобразован в почти код уровня машины.

Надеюсь, ты получил свой ответ.