Нет никакого преимущества в разделении функции на отдельный прототип и определение. Фактически, у этого подхода есть явный и явный недостаток , поскольку для поддержания идеальной синхронизации прототипа и определения требуются дополнительные усилия по обслуживанию. По этой причине разумным подходом будет предоставить отдельный прототип только тогда, когда у вас есть . Например, с внешними функциями, объявленными в заголовочных файлах, у вас нет другого выбора, кроме как хранить прототип и определение отдельно.
Что касается функций, встроенных в одну единицу перевода (те, которые мы обычно объявляем static
), то нет абсолютно никаких причин для создания автономного прототипа, поскольку определение самой функции включает в себя прототип. Просто определите свои функции в естественном порядке: сначала функции низкого уровня, потом функции высокого уровня, и все. Если ваша программа состоит из одного блока перевода, функция main
окажется в самом низу.
Единственный случай, когда вам нужно было бы объявить автономный прототип в этом подходе, был бы, если бы была задействована некоторая форма рекурсии.