Системные вызовы в Linux - Assembler - Ответ 13699759

Исторически #define в си используется для определения констант времени компиляции, однако, эту константу можно изменить, используя переопределение. В простом коде это несложно контролировать, но если используется вложенная условная компиляция, можно запросто налететь на трудно обнаруживаемые проблемы. Поэтому комитет си дабл-кросс навязчиво рекомендует везде где можно, использовать вместо #define костыль в виде определения const-переменной.

Однако, здесь засада -- эта const-переменная не является константой времени компиляции, а переменной времени исполнения, обращение к которой контролируется на стадии компиляции. И она будет размещена в секции data, в то время как константа времени компиляции будет частью кода команды (непосредственный операнд).

Собственно, удивляет, что в си и си дабл-кросс нет конструкции, аналогичной equ, которая есть в ассемблерах.

Вернуться к обсуждению:

Системные вызовы в Linux Assembler