or que o protótipo é necessário mesmo sem nenhuma declaração de class

Se eu fizer: Ex1:

#include <iostream>

int main()
{
    //try to call doSomething function
    doSomething();
}

void doSomething()
{
    std::cout << "Call me now!" << std::endl;
}

Eu recebo erro de compilação! Porque a compilação não sabe o que é "fazer algo".

Mas se eu mudar a posição de doSomething para ficar em primeiro lugar, o programa será compilado com êxito. Ex2:

#include <iostream>

void doSomething()
{
    std::cout << "Call me now!" << std::endl;
}

int main()
{
    //try to call doSomething function
    doSomething();
}

Posso declarar que o protótipo é assim: Ex3:

#include <iostream>

void doSomething(void);

int main()
{
    //try to call doSomething function
    doSomething();
}

void doSomething()
{
    std::cout << "Call me now!" << std::endl;
}

Mas por que o primeiro exemplo não funciona? Por que eu tenho que declarar um protótipo ou chamar funções primeiro e, finalmente, funções principais?

Obrigado

questionAnswers(3)

yourAnswerToTheQuestion