Прошу если не ответить на вопрос прямо, то хотя бы ткнуть мордой в нужную литературу, чтобы почитать.
www.open-std.org/JTC1/SC22/WG14
Скачаешь там стандарт и найдёшь описание
6.10.3 Macro replacement
И макросы используются для простых замен, когда нужно, например, вставить кусок кода в нескольких местах, но на функцию он не тянет. Именно так их и нужно рассматривать - в качестве автоматизированной вставки, не более.