Originariamente inviato da elmapomapo
errore che dava era perchè dichiaravo la funzione nel main. Ma perchè si dichiara fuori?
All'interno di una funzione si possono usare solo delle "statement", ovvero istruzioni. Che sono dichiarazioni di variabili, assegnazioni, operazioni varie, condizionali (if, switch), cicli... etc.

La dichiarazione di funzioni va invece effettuata fuori dal main. Questo perchè anche main() è a tutti gli effetti una funzione, e quando scrivi del codice all'interno di main, stai a tutti gli effetti definendo una funzione di nome main().

Il prototipo è la dichiarazione senza definirla. La dichiarazione di una funzione è la riga che definisce il nome, il tipo di ritorno, gli argomenti che riceve. La definizione è il codice che la funzione deve eseguire.

Una funzione deve sempre essere dichiarata prima del suo primo utilizzo, ma può essere definita anche in seguito. Per prima intendo che deve trovarsi prima del suo uso nel file. Esempio:

codice:
void MyFunc();

int main()
{
   ...
   MyFunc();
   ...
}

void MyFunc()
{
    ...
}
Questo codice è valido perchè MyFunc è dichiarata prima del suo uso. Se invece della dichiarazione ci fosse subito la definizione, cioè

codice:
void MyFunc()
{
    ...
}

int main()
{
   ...
   MyFunc();
   ...
}
sarebbe ugualmente valido. Questo vale anche per altre funzioni oltre a main. Esempio

codice:
void MyFunc()
{
    ...
    FuncA();
    ...
}

void FuncA()
{
    ...
}

int main()
{
   ...
   MyFunc();
   ...
}
Questo codice non compilerebbe, perchè in MyFunc c'è una chiamata ad una funzione che non è stata ancora dichiarata. Per risolvere il problema puoi o spostare la dichiarazione di FuncA sopra quella di MyFunc, o usare il prototipo (o dichiarazione):

codice:
void FuncA();

void MyFunc()
{
    ...
    FuncA();
    ...
}

void FuncA()
{
    ...
}

...