Имеет ли значение функции порядок в С++?

Я начинаю изучать С++. В кодовых блоках IDE это компилируется:

#include <iostream>
using namespace std;

void hi() {
    cout << "hi" << endl;
}

int main() {
    hi();
    return 0;
}

Но это не так:

int main() {
    hi();
    return 0;
}

void hi() {
    cout << "hi" << endl;
}

Это дает мне ошибку:

error: 'hi' was not declared in this scope

Должен ли функционировать функция порядка в С++? Я думал, что нет. Просьба уточнить проблему.

Ответ 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;
}