Макросы можно сравнить с функциями. В определении функции содержаться операторы, которые должны выполниться при вызове функции. В строке замещения макроса содержится текст, который должен быть подставлен в текст программы при вызове макроса.
Общие черты макросов и функций:
· Начинают выполняться в момент вызова,
· Принимают параметры и возвращают значение,
· Вызов выполняется по имени с указанием аргументов,
· При вызове аргументы ставятся на место параметров.
Отличия макросов от функций:
· Определение функции присутствует в программе один раз. Тексты, формируемые макросом, вставляются в программу в каждую точку макровызова.
· Для функции тип аргументов и тип возвращаемого значения фиксированы. Макрос пригоден для обработки аргументов любого типа, который допустим в выражениях строки замещения. Тип получаемого значения зависит только от типов аргументов и выражений строки замещения. Например, рассмотренный макросы MAX( ) работает для аргументов любых целых и вещественных типов.
· Фактические параметры функций могут быть выражениями, которые вычисляются в процессе выполнения программы. Аргументы макровызова не могут быть выражением, содержащим переменные, ранее определенные другой директивой #define.