В обсуждении, которое включает как C, так и C ++, «объявление функции» является довольно расплывчатым термином. Эти языки значительно отличаются в этом отношении.
В языке C ++ существует только один вид объявления функции: объявление со всеми типами параметров и типом возвращаемого значения. Такие объявления необходимы, потому что язык C ++ поддерживает функцию с перегрузкой . Чтобы выбрать, какую функцию вызывать, компилятору необходимо знать все о функции и знать, какие перегруженные версии функции доступны. Если вы «забудете» объявить какую-то перегруженную версию, она не будет учитываться при разрешении перегрузки. Это как минимум одна из причин, по которым объявления функций необходимы в C ++.
В языке C существует два вида объявлений функций: не-прототип объявления и прототип объявления (или просто прототипы ). Прототип на C очень похож на объявление C ++ - он включает в себя все типы параметров. Прототипы всегда требовались в стандарте C для функций с переменным числом (функции с параметрами ...
). Для невариантных функций объявления prototype не требуются даже сегодня. Но, начиная с C99, для всех остальных функций требуются как минимум объявления, не относящиеся к прототипу . В более старой версии C89 / 90 объявлений функций языка для невариантных функций не требовалось.
Итак, это должно в основном ответить на ваш вопрос. В C ++ объявления функций необходимы, потому что возможности языка полагаются на них критически. В современных C-функциях объявления также требуются только для того, чтобы сделать код более безопасным. В более старых версиях объявлений функции C не требовалось в основном просто потому, что язык был определен для работы без них.