Изучаю C++ по книжке С. Прата "Язык программирования C++. Лекции и упражнения", в ней было сказано, что прототип функции должен быть написан до её первого вызова. И main() следовательно должна иметь свой прототип, но в коде его нет. Добавляется ли прототип автоматически, или же его совсем нет? Если добавляется, то на каком этапе(компиляция исходного кода, компоновка, запуск программы в ос)?
Вы немного не разобрались в понятиях вызов функции, объявление функции и прототип функции.
Во-первых, int main - это объявление функции, а не вызов. Во-вторых, функция может быть объявлена без описания прототипа до объявления функции. А вот перед вызовом функции она должна быть либо объявлена, либо описан прототип.
А в книге советуют писать прототипы всех функций до объявления main, чтобы было удобно читать код. Никто вам не мешает объявить любую другую функцию до main без описания ее прототипа
Я знаю, что int main(){...} это определение функции, и что в исходном коде нет вызова функции main(), но эта функция вызывается при запуске программы, значит она должна иметь и определение(которое есть в коде), и прототип(которого нет).