logo

extern Paraula clau en C

La paraula clau extern en C s'aplica a variables C (objectes de dades) i funcions C. Bàsicament, la paraula clau extern amplia la visibilitat de les variables C i de les funcions C. Probablement aquesta és la raó per la qual es va anomenar extern.

Tot i que la majoria de la gent probablement entén la diferència entre la declaració i la definició d'una variable o funció, per tal de completar-ho, aclarim-ho



    La declaració d'una variable o funció simplement declara que la variable o funció existeix en algun lloc del programa, però la memòria no està assignada per a ells. La declaració d'una variable o funció té un paper important: indica al programa quin serà el seu tipus. En el cas que funció declaracions, també indica al programa els arguments, els seus tipus de dades, l'ordre d'aquests arguments i el tipus de retorn de la funció. Així que això és tot sobre la declaració.
  • Arribant a la definició , quan nosaltres definir una variable o funció, a més de tot el que fa una declaració, també assigna memòria per a aquesta variable o funció. Per tant, podem pensar en la definició com un superconjunt de la declaració (o la declaració com un subconjunt de la definició).
  • Extern és un nom curt per a extern.
  • La variable externa s'utilitza quan un fitxer determinat necessita accedir a una variable des d'un altre fitxer.

Sintaxi de extern en C

La sintaxi per definir una variable externa en C és només utilitzar la paraula clau extern abans de la declaració de la variable.

variable java variable
extern data_type variable_name;>

Exemple de variable externa en C

C








#include> > extern> int> a;>// int var; ->declaració i definició>>> // extern int var; ->declaració>> int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

>

>

Propietats de la variable externa en C

  • Quan escrivim extern some_data_type algun_nom_variable; no s'assigna cap memòria. Només s'anuncia la propietat de la variable.
  • Es permeten múltiples declaracions de variable externa dins del fitxer. Aquest no és el cas de les variables automàtiques.
  • La variable externa diu al compilador Sortiu del meu àmbit i trobareu la definició de la variable que he declarat.
  • El compilador creu que qualsevol cosa que digui aquesta variable externa és certa i no produeix cap error. Linker llança un error quan troba que no existeix aquesta variable.
  • Quan s'inicialitza una variable externa, s'assigna memòria per a aquesta i es considerarà definida.

Una variable o funció pot ser declarada qualsevol nombre de vegades, però pot ser definit només una vegada. (Recordeu el principi bàsic que no podeu tenir dues ubicacions de la mateixa variable o funció).
Ara tornem a la paraula clau extern. Primer, considerem l'ús de extern a les funcions. Resulta que quan es declara o defineix una funció, s'assumeix implícitament la paraula clau extern. Quan escrivim.

int foo(int arg1, char arg2);>

El compilador el tracta com:

extern int foo(int arg1, char arg2);>

Com que la paraula clau extern amplia la visibilitat de la funció a tot el programa, la funció es pot utilitzar (anomenar) a qualsevol lloc de qualsevol dels fitxers de tot el programa, sempre que aquests fitxers continguin una declaració de la funció. (Amb la declaració de la funció al seu lloc, el compilador sap que la definició de la funció existeix en un altre lloc i segueix endavant i compila el fitxer). Així que tot es tracta d'extern i de funcions.
Ara considerem l'ús d'extern amb variables. Per començar, com ho faries declarar una variable sense definint això? Faríeu una cosa com això:

extern int var;>

Aquí, s'ha declarat una variable de tipus enter anomenada var (encara no s'ha definit, de manera que fins ara no hi ha assignació de memòria per a var). I aquesta declaració la podem fer tantes vegades com vulguem.
Ara, com ho faries definir var? Tu faries això:

int var = 10;>

En aquesta línia, s'ha declarat una variable de tipus enter anomenada var i definit (recordeu-ho definició és el superconjunt de declaració ). Com que això és un definició , també s'assigna la memòria per a var. Ara ve la sorpresa. Quan vam declarar/definir una funció, vam veure que la paraula clau extern estava present implícitament. Però aquest no és el cas de les variables. Si fos així, mai els hi destinaria memòria. Per tant, hem d'incloure explícitament la paraula clau extern quan volem declarar variables sense definir-les. A més, com que la paraula clau extern amplia la visibilitat a tot el programa, utilitzant la paraula clau extern amb una variable, podem utilitzar la variable en qualsevol lloc del programa sempre que incloem la seva declaració que la variable està definida en algun lloc.
Ara intentem entendre extern amb exemples.

Exemple 1:

c




int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Aquest programa es compila correctament. var es defineix (i es declara implícitament) globalment.

Exemple 2:

c




extern> int> var;> int> main(>void>)> {> >return> 0;> }>

>

>

Aquest programa es compila correctament. Aquí només es declara var. Avís que var mai s'utilitza, de manera que no hi ha cap problema.

matrius bash

Exemple 3:

c




extern> int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Aquest programa genera un error en la compilació (durant la fase d'enllaç, més informació aquí) perquè var es declara però no es defineix enlloc. Essencialment, a la var no se li assigna cap memòria. I el programa està intentant canviar el valor a 10 d'una variable que no existeix en absolut.

Exemple 4:

c




// 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>

>

>

Sortida:

10>

Nota: Aquí sorgeix un altre escenari, què passa si no declarem amb extern al fragment de codi anterior?

Tenint en compte la suposició que somefile.h conté la definició de var, aquest programa es compilarà correctament. La paraula clau 'extern' s'utilitza per a una variable quan declarem la variable en un fitxer i la definim en un altre fitxer. Però aquí quan importem el mateix fitxer al fitxer on es declara, aquí es generarà un error del compilador.

És perquè encara hem d'utilitzar la paraula clau extern al fitxer on hem declarat aquesta variable per dir-li al nostre compilador que aquesta variable s'ha definit en un altre lloc que només no s'assignarà espai de memòria nou, sinó crearà un altre bloc de memòria. quin ús de la paraula clau 'externa' és inútil.

Exemple 5:

c




extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

java llegir csv

>

>

Creus que aquest programa funcionarà? Bé, aquí ve una altra sorpresa dels estàndards C. Diuen que... si només es declara una variable i també es proporciona un inicialitzador amb aquesta declaració, s'assignarà la memòria d'aquesta variable, és a dir, aquesta variable es considerarà definida. Per tant, segons l'estàndard C, aquest programa es compilarà amb èxit i funcionarà.
Així que va ser una mirada preliminar a la paraula clau extern a C.

En resum, podem dir:

  1. Una declaració es pot fer qualsevol nombre de vegades, però només es pot definir una vegada.
  2. la paraula clau extern s'utilitza per ampliar la visibilitat de variables/funcions.
  3. Com que les funcions són visibles a tot el programa per defecte, l'ús de l'extern no és necessari en les declaracions o definicions de funcions. El seu ús és implícit.
  4. Quan extern s'utilitza amb una variable, només es declara, no es defineix.
  5. Com a excepció, quan es declara una variable externa amb la inicialització, també es pren com a definició de la variable.