logo

ključna beseda extern v C

ključna beseda extern v C velja za spremenljivke C (podatkovne objekte) in funkcije C. V bistvu ključna beseda extern razširi vidnost spremenljivk C in funkcij C. To je verjetno razlog, zakaj so ga poimenovali ekstern.

Čeprav večina ljudi verjetno razume razliko med deklaracijo in definicijo spremenljivke ali funkcije, jo zaradi popolnosti razjasnimo



    Deklaracija spremenljivke ali funkcije preprosto izjavi, da spremenljivka ali funkcija obstaja nekje v programu, vendar ji pomnilnik ni dodeljen. Deklaracija spremenljivke ali funkcije ima pomembno vlogo – programu pove, kakšen bo njen tip. V primeru funkcijo deklaracije, programu tudi pove argumente, njihove tipe podatkov, vrstni red teh argumentov in povratni tip funkcije. To je torej vse o deklaraciji.
  • Prihajam na definicija , ko smo opredeliti spremenljivki ali funkciji, poleg vsega, kar naredi deklaracija, tudi dodeli pomnilnik za to spremenljivko ali funkcijo. Zato si lahko definicijo predstavljamo kot nadmnožico deklaracije (ali deklaracijo kot podmnožico definicije).
  • Extern je kratko ime za external.
  • Extern spremenljivka se uporablja, ko morajo določene datoteke dostopati do spremenljivke iz druge datoteke.

Sintaksa extern v C

Sintaksa za definiranje spremenljivke extern v C je samo uporaba ključne besede extern pred deklaracijo spremenljivke.

extern data_type variable_name;>

Primer zunanje spremenljivke v C

C








#include> > extern> int> a;>// int var; ->deklaracija in definicija> >// extern int var; ->izjava> > int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

>

>

Lastnosti zunanje spremenljivke v C

  • Ko napišemo extern some_data_type some_variable_name; pomnilnik ni dodeljen. Napovedana je samo lastnost spremenljivke.
  • V datoteki je dovoljenih več deklaracij zunanje spremenljivke. To ne velja za samodejne spremenljivke.
  • Extern spremenljivka pravi prevajalniku Pojdite izven mojega obsega in našli boste definicijo spremenljivke, ki sem jo prijavil.
  • Prevajalnik verjame, da je vse, kar je povedala zunanja spremenljivka, resnično in ne povzroča napak. Povezovalnik vrže napako, ko ugotovi, da taka spremenljivka ne obstaja.
  • Ko je zunanja spremenljivka inicializirana, se ji dodeli pomnilnik in velja za definirano.

Spremenljivka ali funkcija je lahko razglašeno kolikokrat, lahko pa je definiran Samo enkrat. (Zapomnite si osnovno načelo, da ne morete imeti dveh lokacij iste spremenljivke ali funkcije).
Zdaj pa nazaj k ključni besedi extern. Najprej razmislimo o uporabi extern v funkcijah. Izkazalo se je, da ko je funkcija deklarirana ali definirana, je ključna beseda extern implicitno prevzeta. Ko pišemo.

int foo(int arg1, char arg2);>

Prevajalnik ga obravnava kot:

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

Ker ključna beseda extern razširi vidnost funkcije na celoten program, je funkcijo mogoče uporabiti (poklicati) kjer koli v kateri koli datoteki celotnega programa, če te datoteke vsebujejo deklaracijo funkcije. (Z deklaracijo funkcije na mestu prevajalnik ve, da definicija funkcije obstaja nekje drugje, in nadaljuje in prevede datoteko). To je torej vse o eksternih in funkcijah.
Zdaj pa razmislimo o uporabi extern s spremenljivkami. Za začetek, kako bi izjaviti spremenljivka brez definiranje to? Naredili bi nekaj takega:

extern int var;>

Tukaj je bila deklarirana spremenljivka celoštevilskega tipa, imenovana var (še ni bila definirana, zato zaenkrat še ni bilo dodeljenega pomnilnika za var). In to izjavo lahko izvedemo kolikorkrat želimo.
Zdaj, kako bi opredeliti var? Naredili bi to:

int var = 10;>

V tej vrstici je bila deklarirana celoštevilska spremenljivka, imenovana var in definiran (zapomni si to definicija je nadmnožica izjava ). Ker je to a definicija , je dodeljen tudi pomnilnik za var. Zdaj pa sledi presenečenje. Ko smo deklarirali/definirali funkcijo, smo videli, da je ključna beseda extern implicitno prisotna. Vendar to ne velja za spremenljivke. Če bi bilo, jim pomnilnik nikoli ne bi bil dodeljen. Zato moramo eksplicitno vključiti ključno besedo extern, ko želimo deklarirati spremenljivke, ne da bi jih definirali. Poleg tega, ker ključna beseda extern razširi vidnost na celoten program, lahko z uporabo ključne besede extern s spremenljivko uporabimo spremenljivko kjer koli v programu, če vključimo njeno deklaracijo, spremenljivka je nekje definirana.
Zdaj pa poskusimo razumeti extern s primeri.

Primer 1:

c

razvrščanje arraylist java




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

>

>

Ta program se uspešno prevede. var je definiran (in deklariran implicitno) globalno.

Primer 2:

c




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

>

>

Ta program se uspešno prevede. Tukaj je deklarirana samo var. Upoštevajte, da var ni nikoli uporabljen, tako da ne pride do težav.

git add --all

Primer 3:

c




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

>

>

Ta program sproži napako pri prevajanju (med fazo povezovanja, več informacij tukaj), ker je var deklariran, vendar ni nikjer definiran. V bistvu spremenljivki ni dodeljen noben pomnilnik. In program poskuša spremeniti vrednost na 10 spremenljivke, ki sploh ne obstaja.

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

>

>

shweta tiwari igralec

Izhod:

10>

Opomba: Tu se pojavi še en scenarij, kaj če v zgornjem delčku kode ne deklariramo z extern?

Ob upoštevanju predpostavke, da somefile.h vsebuje definicijo var, se bo ta program uspešno prevedel. Ključna beseda 'extern' se uporablja za spremenljivko, ko spremenljivko deklariramo v eni datoteki in jo definiramo v drugi datoteki. Ko pa isto datoteko uvozimo v datoteko, v kateri je deklarirana, bo tukaj ustvarjena napaka prevajalnika.

To je zato, ker moramo še vedno uporabiti ključno besedo extern v datoteki, kjer smo deklarirali to spremenljivko, da našemu prevajalniku sporočimo, da je ta spremenljivka definirana nekje drugje, kot da ne bo dodeljen le nov pomnilniški prostor, sicer bo ustvaril nov pomnilniški blok katera uporaba ključne besede 'extern' je neuporabna.

Primer 5:

c




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

>

>

Mislite, da bo ta program deloval? No, prihaja še eno presenečenje standardov C. Pravijo, da...če je spremenljivka samo deklarirana in je s to deklaracijo zagotovljen tudi inicializator, potem bo pomnilnik za to spremenljivko dodeljen – z drugimi besedami, ta spremenljivka bo obravnavana kot definirana. Zato bo ta program v skladu s standardom C uspešno prevedel in deloval.
To je bil torej predhodni pogled na ključno besedo extern v C.

Na kratko lahko rečemo:

  1. Deklaracijo je mogoče narediti poljubno število krat, definirati pa jo lahko le enkrat.
  2. ključna beseda extern se uporablja za razširitev vidnosti spremenljivk/funkcij.
  3. Ker so funkcije privzeto vidne v celotnem programu, uporaba extern v deklaracijah ali definicijah funkcij ni potrebna. Njegova uporaba je implicitna.
  4. Ko se extern uporablja s spremenljivko, je samo deklarirana, ne definirana.
  5. Izjemoma se, ko je zunanja spremenljivka deklarirana z inicializacijo, vzame tudi kot definicijo spremenljivke.