2011-02-04 18 views

risposta

11

Sì, la tua ipotesi è corretta. Sta dichiarando l'esistenza della funzione abc(), quindi può essere referenziato all'interno di xyz(). Notare che lo extern non è necessario, poiché le funzioni sono extern per impostazione predefinita.

+3

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

+4

@Lundin: scrivi 'auto' prima di tutte le variabili locali? –

+0

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

2

La dichiarazione "extern" in C indica l'esistenza e il tipo di una variabile o funzione globale.

Un extern è qualcosa che viene definito esternamente al modulo corrente.

Non è raro trovare anche prototipi di funzione dichiarati come extern.

È necessario solo dove non è l'impostazione predefinita e/o dove si desidera specificare il collegamento "C".

0

Sì, la tua affermazione è corretta ..... quando usiamo ext_name nome w stiamo dichiarando func_name.

0

Vorrei solo aggiungere che questo costrutto, nella mia esperienza, è raro nel codice moderno, ma spesso visto nel vecchio codice, in particolare il codice "K & R".

Più codice moderno di solito ottiene il prototipo di funzione da un file di intestazione.

2

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 .. :))

Problemi correlati