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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top