В настоящее время я читаю книгу «Архитектура SPARC, программирование на языке ассемблера и C. Второе издание». Я дошел до места в книге, где я не понимаю или не могу понять определенную команду:
define(loc, 0)
define(sto, 'loc: 44 $1 define('loc', eval(loc+2))')
Дело в том, что я понимаю первую строчку. Но я действительно не понимаю второй аргумент 2-й строки. Объяснение в книге также не помогает.
Из книги:
Здесь мы сначала определили символ loc со значением 0. Этот символ будет представлять счетчик местоположения, адрес памяти собираемой инструкции. Каждое определение макроса было изменено сначала для печати текущего значения loc, а затем для переопределения loc на loc плюс ячейки памяти, необходимые для хранения инструкции.
Аргументами макросов являются символы и строки символов, а не числовые значения. При переопределении значения loc мы используем еще один встроенный макрос eval. eval принимает строковый аргумент для представления арифметического выражения. eval оценивает это выражение и возвращает его значение в виде строки числовых символов.
Я знаю, что приведенное выше объяснение может показаться вам совершенно ясным, но не мне. Чего я точно не понимаю, так это части: 'loc: 44 $1 define('loc', eval(loc+2))'
Я не понимаю:
Почему это строка?
Почему loc должен быть там?
Почему после определения 44 $1 существует другое определение, define('loc', eval(loc+2))'?