Alexeyslav, препроцессоры бывают разные. Не зря там написано "The C Preprocessor".
AvrAssembler2 умеет обрабатывать определения в стиле Си-шного препроцессора и знает что такое ".marco", однако cpp (GNU C Preprocessor) не знает что такое ".macro".
Не спорю, что само определение макроса можно рассматривать независимо от языка, и можно "ручками" сделать не типичную схему обработки исходника с использованием каких угодно средств. И, соответственно, можно попробовать прикрутить препроцессор от AvrAssembler2 к программе на Си - только зачем?
Alexeyslav писал(а):макрос делается при помощи пары директив .macro и .endmacro
Это для ассемблеров! Типично для ассемблеров.
Для Си, обычно, все делается через "#define". Посмотрите раздел 3 по ссылке про препроцессор для Си - как называется раздел и с помощью каких директив создаются макросы в Си.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)