Препроцессор при обработке макросов в C++ работает следующим образом:
- Определение макроса осуществляется с помощью директивы #define, за которой следует идентификатор макроса и его определение. www.cyberforum.ru
- Если имя макроса распознаётся в исходном тексте программы или в аргументах некоторых других команд препроцессора, оно рассматривается как вызов этого макроса. learn.microsoft.com
- Имя макроса заменяется копией тела макроса. learn.microsoft.com Если макрос принимает аргументы, фактические аргументы после имени макроса заменяются на формальные параметры в теле макроса. learn.microsoft.com
- Препроцессор выполняет рекурсивное расширение макросов до тех пор, пока все макросы не будут заменены их определениями. www.cyberforum.ru Это может привести к сложным цепочкам подстановок, особенно при использовании вложенных макросов. www.cyberforum.ru Для предотвращения бесконечной рекурсии препроцессор не выполняет повторное расширение макроса внутри его собственного определения. www.cyberforum.ru
Важно учитывать, что препроцессор выполняет чисто текстовую подстановку, не анализируя типы данных или синтаксическую корректность результата. www.cyberforum.ru Это может привести к неожиданному поведению, если макрос определён некорректно. www.cyberforum.ru