Давайте разбираться как работает макро-функция и для чего вообще она была придумана и почему так оформляется.
Предположим, что есть ситуация, когда надо многократно выполнить одно и то же действие, причем вызывается это действие как из разных частей основной программы, так и из иных модулей этого (или иного) проекта. Тогда прописывать один и тот же код, зачастую длинный и обладающий своими внутренними ветвлениями, процедурами и ссылками, просто неразумно, т.к. основной код становится просто нечитаемым и труднопонимаемым. Тогда этот кусок и оформляется как внешний модуль или макро-функция.
Надо понимать, что этот модуль изначально написан только для выполнения какого-то вполне определенного действия и в этот модуль основная (вызывающая) процедура передает набор параметров, которые определены как в вызывающем модуле, так и в вызываемой функции. Принятые параметры принимают в макросе новые значения, которые передаются в вызывающую процедуру.
Любой макрос может быть вызван для выполнения прописанных в нем действий из любой внешней процедуры, если та передает набор определенных параметров в функцию и принимает их обратно. По смыслу работы это однотипно выполнению стандартных встроенных функций типа sin() или cos(). Разница в том, что макрос прописывается программистом и не является встроенной функцией.
Вроде понятно рассказал