Первоначальная цель прототипов заключалась в поддержке прямых ссылок на функции, которые могут обрабатываться однопроходными компиляторами.
Другими словами, если у вас есть что-то вроде этого:
void function_A(){
printf( "%d", function_B( 5 ) );
}
int function_B( int x ){
return x * 2;
}
function_B вызывается до того, как она определена.Это создаст проблемы для простых компиляторов.Чтобы избежать этих проблем, размещение прототипов в начале файла гарантирует, что компилятор заранее знает обо всех функциях в файле, поэтому прямые ссылки не являются проблемой для проверки типа.
Поскольку вседействительные формы основной функции известны компилятору заранее, создание прототипа не требуется, поскольку компилятор может проверять прямую ссылку на main () без него.