Questo modo di dichiarazione ha un grande vantaggio:
Se solo uno o meno funzioni chiamano una funzione esterna, questa dichiarazione ha senso soprattutto all'interno di un file grande fonte. Se è necessario eseguire una ristrutturazione successiva del codice (spostamento della funzione in un altro file), è molto più facile vedere le dipendenze rispetto all'aggiunta di estensioni sull'ambito globale (file). In quest'ultimo caso la probabilità di "dimenticare" tali elementi esterni in un file è più alta. Al contrario, dichiarandolo nell'ambito della funzione, la dichiarazione si muoverà insieme alla funzione ...
Tendo anche a farlo per le variabili globali esterne: il vantaggio viene in seguito quando si mantiene ed eventualmente si ristruttura/riduce al minimo le dipendenze.
Un'ultima nota all'argomento "scrittura esterna/non esterna": Se è solo una dichiarazione di inoltro (-> la funzione è definita alla fine dello stesso file), non raccomanderei l'uso esterno - perché semplicemente non è il caso. Altrimenti l'esterno ha senso assoluto per indicare che la definizione deve essere trovata da qualche altra parte (o per le librerie: potrebbe essere necessario implementarla dagli utenti di tale libreria).
Spero che questo aiuti (come un passo per uno stile di programmazione orientata più oggettiva .. :))
non lo definirei extern inutili. Si potrebbe dire che scrivere extern prima di un prototipo è più corretto dal punto di vista grammaticale, invece di averlo lì implicitamente. Personalmente scrivo sempre extern prima dei prototipi, perché questo mi dà l'abitudine di scrivere sempre * qualcosa * prima di loro. In questo modo non dimenticherò di scrivere statico prima di funzioni che dovrebbero essere incapsulate privatamente. – Lundin
@Lundin: scrivi 'auto' prima di tutte le variabili locali? –
ma perché dichiarare l'esistenza all'interno di una funzione e non direttamente nel file (ad es. Prima della definizione di ciascuna funzione). O è per attivare il riferimento a un momento definito e non durante la compilazione? – binaryguy