Я читаю книгу о C, и где-то в коде авторов я нашел определение прототипа функции, затем макрос с тем же именем, и нет определения самой функции ни в любом файле .h
10, ни в файле .c
,Зачем определять прототип функции, а затем макрос препроцессора с тем же именем?
Я имею в виду что-то вроде этого:
int print_my_stufff(char *stuff);
#define print_my_stuff(A) (printf("%s\n", A))
/* and print-my-stuff() function never defined anywhere else */
код работает, но я просто не понимаю, почему ему нужен прототип функции в первую очередь? Не мог он просто написать макрос? В чем смысл? Должен ли он сказать компилятору, что макрос должен быть оценен для выражения, которое возвращает int
или что? Удаление прототипа, похоже, не изменяет поведения. Автор этого не объяснил.
Возможно, это документ макроса. В частности, тип возврата и типы параметров. Автор может делать это только для книги, или автор может даже подумать, что это хорошая практика в целом. – kaylum
Я никогда не видел применения на практике, поэтому я могу только догадываться: возможно, прототип предназначен для документирования типов параметров макроса? –
@kaylum Тогда почему бы просто не написать комментарий? '// этот макрос делает foo' – Arc676