C89: Necessità di dichiarare le funzioni prima di riferimento?
Domanda
Sono nuovo di C89, e sembra che è necessario dichiarare una funzione prima di chiamare. Quindi questo è inaccettabile:
void foo() {
bar();
}
void bar() {
// do stuff
}
A causa bar()
è definito dopo foo()
nel file. C'è un modo per aggirarlo? Ho bisogno di un file di intestazione?
Soluzione
Aggiungi un prototipo:
void bar(); // prototype for function bar() which is implemented later
void foo() {
bar();
}
void bar() {
// do stuff
}
Per i progetti con file di codice sorgente multipla, i prototipi saranno tipicamente collocati in file di intestazione e inclusi in più file di origine; l'attuazione deve essere specificato solo in un singolo file di origine. Il compilatore ha solo bisogno il prototipo di essere in grado di eseguire una corretta tipo controllo, ecc.
Altri suggerimenti
Inoltre, se le funzioni non hanno bisogno di essere chiamato da fuori del file (ad esempio, se le funzioni possono essere fatte "statica") allora si può spesso semplicemente ordinare le funzioni nel file in modo tale che il compilatore vede la definizione di una funzione prima di utilizzare la funzione.