La parola chiave extern in C si applica alle variabili C (oggetti dati) e alle funzioni C. Fondamentalmente, la parola chiave extern estende la visibilità delle variabili C e delle funzioni C. Questo è probabilmente il motivo per cui è stato chiamato extern.
Anche se la maggior parte delle persone probabilmente comprende la differenza tra la dichiarazione e la definizione di una variabile o funzione, per ragioni di completezza, chiariamola
- La dichiarazione di una variabile o di una funzione dichiara semplicemente che la variabile o la funzione esiste da qualche parte nel programma, ma la memoria non è allocata per esse. La dichiarazione di una variabile o di una funzione svolge un ruolo importante: dice al programma quale sarà il suo tipo. In caso di funzione dichiarazioni, comunica al programma anche gli argomenti, i relativi tipi di dati, l'ordine di tali argomenti e il tipo restituito dalla funzione. Quindi questo è tutto sulla dichiarazione.
- Venendo al definizione , quando noi definire una variabile o una funzione, oltre a tutto ciò che fa una dichiarazione, alloca anche memoria per quella variabile o funzione. Pertanto, possiamo pensare alla definizione come a un superinsieme della dichiarazione (o alla dichiarazione come a un sottoinsieme della definizione).
- Extern è un nome abbreviato per esterno.
- La variabile extern viene utilizzata quando un file particolare deve accedere a una variabile da un altro file.
Sintassi di extern in C
La sintassi per definire una variabile extern in C consiste semplicemente nell'utilizzare la parola chiave extern prima della dichiarazione della variabile.
extern data_type variable_name;>
Esempio di variabile esterna in C
C
#include> > extern> int> a;> // int var; ->dichiarazione e definizione> > // extern int var; ->dichiarazione> > int> main()> {> > printf> (> '%d'> , a);> > > return> 0;> }> |
>
>
Proprietà della variabile esterna in C
- Quando scriviamo extern some_data_type some_variable_name; non viene allocata alcuna memoria. Viene annunciata solo la proprietà della variabile.
- All'interno del file sono consentite più dichiarazioni di variabile esterna. Questo non è il caso delle variabili automatiche.
- La variabile extern dice al compilatore Esci dal mio ambito e troverai la definizione della variabile che ho dichiarato.
- Il compilatore ritiene che qualunque cosa abbia detto quella variabile esterna sia vera e non produca errori. Il linker genera un errore quando rileva che tale variabile non esiste.
- Quando una variabile esterna viene inizializzata, viene allocata memoria per questa e verrà considerata definita.
Una variabile o una funzione può essere dichiarato un numero qualsiasi di volte, ma può essere definito solo una volta. (Ricorda il principio di base secondo cui non puoi avere due posizioni della stessa variabile o funzione).
Ora torniamo alla parola chiave extern. Innanzitutto, consideriamo l'uso di extern nelle funzioni. Risulta che quando una funzione viene dichiarata o definita, la parola chiave extern viene implicitamente assunta. Quando scriviamo.
int foo(int arg1, char arg2);>
Il compilatore lo tratta come:
ordina un arraylist in Java
extern int foo(int arg1, char arg2);>
Poiché la parola chiave extern estende la visibilità della funzione all'intero programma, la funzione può essere utilizzata (chiamata) ovunque in qualsiasi file dell'intero programma, a condizione che tali file contengano una dichiarazione della funzione. (Con la dichiarazione della funzione in atto, il compilatore sa che la definizione della funzione esiste da qualche altra parte e va avanti e compila il file). Quindi è tutta una questione di esterno e funzioni.
Consideriamo ora l'uso di extern con variabili. Per cominciare, come faresti? dichiarare una variabile senza definendo Esso? Faresti qualcosa del genere:
extern int var;>
Qui è stata dichiarata una variabile di tipo intero chiamata var (non è stata ancora definita, quindi finora non è stata allocata memoria per var). E possiamo fare questa dichiarazione quante volte vogliamo.
Ora, come faresti? definire var? Faresti questo:
int var = 10;>
In questa riga è stata dichiarata una variabile di tipo intero chiamata var E definito (ricordatelo definizione è il superinsieme di dichiarazione ). Poiché questo è un definizione , viene allocata anche la memoria per var. Adesso arriva la sorpresa. Quando abbiamo dichiarato/definito una funzione, abbiamo visto che la parola chiave extern era presente implicitamente. Ma questo non è il caso delle variabili. Se lo fosse, la memoria non verrebbe mai allocata per loro. Pertanto, dobbiamo includere esplicitamente la parola chiave extern quando vogliamo dichiarare variabili senza definirle. Inoltre, poiché la parola chiave extern estende la visibilità all'intero programma, utilizzando la parola chiave extern con una variabile, possiamo usare la variabile ovunque nel programma purché ne includiamo la dichiarazione, la variabile è definita da qualche parte.
Ora proviamo a capire l'esterno con degli esempi.
Esempio 1:
C
eliminare il file in Java
int> var;> int> main(> void> )> {> > var = 10;> > return> 0;> }> |
>
>
Questo programma viene compilato correttamente. var è definito (e dichiarato implicitamente) a livello globale.
Esempio 2:
C
Android può giocare a GamePigeon
extern> int> var;> int> main(> void> )> {> > return> 0;> }> |
>
>
Questo programma viene compilato correttamente. Qui è dichiarata solo var. Notare che var non viene mai utilizzato, quindi non si verificano problemi.
Esempio 3:
C
extern> int> var;> int> main(> void> )> {> > var = 10;> > return> 0;> }> |
>
>
Questo programma genera un errore nella compilazione (durante la fase di collegamento, maggiori informazioni qui) perché var è dichiarato ma non definito da nessuna parte. Essenzialmente, alla var non viene allocata alcuna memoria. E il programma sta cercando di cambiare il valore in 10 di una variabile che non esiste affatto.
Esempio 4:
C
converte la stringa in intero
// As we are importing the file and henceforth the> // defination> #include 'somefile.h'> > // Declaring the same variable> extern> int> var;> > // int var;> > // It will throw compiler error as compiler will get> > // confused where the variable is defined> > int> main(> void> )> {> > var = 10;> > return> 0;> }> > // Now it will compile and run successfully> |
>
>
Produzione:
10>
Nota: Qui si presenta un altro scenario: cosa succede se non dichiariamo con extern nello snippet di codice sopra?
Considerando il presupposto che somefile.h contenga la definizione di var, questo programma verrà compilato con successo. La parola chiave 'extern' viene utilizzata per una variabile quando dichiariamo la variabile in un file e la definiamo in un altro file. Ma qui quando importiamo lo stesso file nel file in cui è dichiarato, verrà generato un errore del compilatore.
È perché dobbiamo ancora usare la parola chiave extern nel file in cui abbiamo dichiarato quella variabile in modo da dire al nostro compilatore che questa variabile è stata definita da qualche altra parte che solo il nuovo spazio di memoria non verrà allocato altrimenti creerà un altro blocco di memoria quale utilizzo della parola chiave 'extern' è inutile.
Esempio 5:
C
L'attrice Sai Pallavi
extern> int> var = 0;> int> main(> void> )> {> > var = 10;> > return> 0;> }> |
>
>
Pensi che questo programma funzionerà? Bene, ecco un'altra sorpresa dagli standard C. Dicono che... se una variabile viene solo dichiarata e con quella dichiarazione viene fornito anche un inizializzatore, allora verrà allocata la memoria per quella variabile, in altre parole, quella variabile sarà considerata come definita. Pertanto, secondo lo standard C, questo programma verrà compilato e funzionerà correttamente.
Questo era uno sguardo preliminare alla parola chiave extern in C.
In sintesi possiamo dire:
- Una dichiarazione può essere eseguita un numero qualsiasi di volte ma definita solo una volta.
- la parola chiave extern viene utilizzata per estendere la visibilità di variabili/funzioni.
- Poiché le funzioni sono visibili in tutto il programma per impostazione predefinita, l'uso di extern non è necessario nelle dichiarazioni o definizioni di funzioni. Il suo utilizzo è implicito.
- Quando extern viene utilizzato con una variabile, viene solo dichiarato, non definito.
- In via eccezionale, quando una variabile extern viene dichiarata con l'inizializzazione, viene considerata anche la definizione della variabile.