Ответ 1
Да, вы должны хотя бы объявить функцию до того, как вы ее вызовете, даже если фактическое определение не появится до этого.
Вот почему вы часто объявляете функции в файлах заголовков, а затем #include
их в верхней части вашего файла cpp. Затем вы можете использовать функции в любом порядке, так как они уже были объявлены.
Обратите внимание, что в этом случае вы могли бы это сделать. (рабочий пример)
void hi(); // This function is now declared
int main() {
hi();
return 0;
}
void hi() { // Even though the definition is afterwards
cout << "hi" << endl;
}