logo

išorinis raktinis žodis C

extern raktažodis C taikomas C kintamiesiems (duomenų objektams) ir C funkcijoms. Iš esmės išorinis raktinis žodis išplečia C kintamųjų ir C funkcijų matomumą. Tikriausiai dėl šios priežasties jis buvo pavadintas išoriniu.

int eilutėje java

Nors dauguma žmonių tikriausiai supranta skirtumą tarp deklaracijos ir kintamojo ar funkcijos apibrėžimo, išsamumo dėlei paaiškinkime tai



    Kintamojo ar funkcijos deklaravimas tiesiog deklaruoja, kad kintamasis ar funkcija kažkur programoje egzistuoja, tačiau atmintis jiems neskirta. Kintamojo ar funkcijos deklaracija atlieka svarbų vaidmenį – ji nurodo programai, koks bus jos tipas. Jeigu funkcija deklaracijas, ji taip pat nurodo programai argumentus, jų duomenų tipus, tų argumentų eiliškumą ir funkcijos grąžinimo tipą. Taigi viskas apie deklaraciją.
  • Ateina į apibrėžimas , kada mes apibrėžti kintamasis arba funkcija, be visko, ką daro deklaracija, jis taip pat skiria atmintį tam kintamajam ar funkcijai. Todėl apibrėžimą galime manyti kaip deklaracijos viršaibį (arba deklaraciją kaip apibrėžimo poaibį).
  • Extern yra trumpas išorinis pavadinimas.
  • Išorinis kintamasis naudojamas, kai tam tikram failui reikia pasiekti kintamąjį iš kito failo.

Extern sintaksė C

Sintaksė, skirta apibrėžti išorinį kintamąjį C, yra tiesiog naudoti išorinį raktinį žodį prieš kintamojo deklaraciją.

extern data_type variable_name;>

Išorinio kintamojo pavyzdys C

C








#include> > extern> int> a;>// int var; ->deklaracija ir apibrėžimas>> // extern int var; ->deklaracija>> int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

>

>

Išorinio kintamojo savybės C

  • Kai rašome extern some_data_type some_kintamo_pavadinimas; atmintis nepaskirta. Skelbiama tik kintamojo savybė.
  • Faile leidžiamos kelios išorinio kintamojo deklaracijos. Taip nėra su automatiniais kintamaisiais.
  • Išorinis kintamasis sako kompiliatoriui Išeik už mano taikymo srities ribų ir rasite kintamojo, kurį deklaravau, apibrėžimą.
  • Kompiliatorius mano, kad tai, ką sako išorinis kintamasis, yra tiesa ir nesukelia klaidų. „Linker“ pateikia klaidą, kai nustato, kad tokio kintamojo nėra.
  • Kai inicijuojamas išorinis kintamasis, jam skiriama atmintis ir ji bus laikoma apibrėžta.

Kintamasis arba funkcija gali būti deklaravo bet kiek kartų, bet gali būti apibrėžta tik vieną kartą. (Atminkite pagrindinį principą, kad negalite turėti dviejų to paties kintamojo ar funkcijos vietų).
Dabar grįžkite prie išorinio raktinio žodžio. Pirma, apsvarstykime išorinio naudojimą funkcijose. Pasirodo, kad kai funkcija deklaruojama arba apibrėžiama, išorinis raktinis žodis yra netiesiogiai numanomas. Kai rašome.

int foo(int arg1, char arg2);>

Kompiliatorius tai traktuoja taip:

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

Kadangi išorinis raktinis žodis išplečia funkcijos matomumą visai programai, funkcija gali būti naudojama (iškviečiama) bet kuriame visos programos faile, jei tuose failuose yra funkcijos deklaracija. (Kai funkcijos deklaracija yra vietoje, kompiliatorius žino, kad funkcijos apibrėžimas egzistuoja kažkur kitur, ir jis eina į priekį ir sukompiliuoja failą). Taigi viskas apie išorę ir funkcijas.
Dabar apsvarstykime išorinio su kintamaisiais naudojimą. Pirmiausia, kaip jūs deklaruoti kintamasis be apibrėžiantis tai? Jūs padarytumėte kažką panašaus:

extern int var;>

Čia buvo deklaruotas sveikojo skaičiaus kintamasis, vadinamas var (jis dar neapibrėžtas, todėl varo varo atminties paskirstymas iki šiol nėra). Ir šią deklaraciją galime daryti tiek kartų, kiek norime.
O kaip tu dabar apibrėžti var? Jūs darytumėte tai:

int var = 10;>

Šioje eilutėje buvo deklaruotas sveikojo skaičiaus kintamasis, vadinamas var ir apibrėžta (atminkite, kad apibrėžimas yra superrinkinys deklaracija ). Kadangi tai yra a apibrėžimas , taip pat yra skirta var atmintis. Dabar čia ateina netikėtumas. Kai deklaravome / apibrėžėme funkciją, pamatėme, kad išorinis raktinis žodis buvo netiesiogiai. Tačiau tai netinka kintamiesiems. Jei taip būtų, atmintis jiems niekada nebūtų skirta. Todėl turime aiškiai įtraukti išorinį raktinį žodį, kai norime deklaruoti kintamuosius jų neapibrėždami. Be to, kadangi išorinis raktinis žodis išplečia visos programos matomumą, naudojant išorinį raktinį žodį su kintamuoju, kintamąjį galime naudoti bet kurioje programos vietoje, jei įtrauksime jo deklaraciją, kintamasis kažkur yra apibrėžtas.
Dabar pabandykime suprasti išorę su pavyzdžiais.

1 pavyzdys:

c




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

>

>

Ši programa sėkmingai kompiliuojama. var yra apibrėžtas (ir netiesiogiai deklaruojamas) visame pasaulyje.

2 pavyzdys:

c




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

>

>

Ši programa sėkmingai kompiliuojama. Čia deklaruojamas tik var. Pastaba var niekada nenaudojamas, todėl problemų nekyla.

3 pavyzdys:

c




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

>

>

Ši programa pateikia klaidą kompiliacijoje (susiejimo fazės metu, daugiau informacijos čia ), nes var yra deklaruojamas, bet niekur neapibrėžtas. Iš esmės varikliui neskiriama jokia atmintis. Ir programa bando pakeisti kintamojo, kurio apskritai nėra, reikšmę į 10.

4 pavyzdys:

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>

>

>

Išvestis:

10>

Pastaba: Čia iškyla kitas scenarijus, ką daryti, jei aukščiau esančiame kodo fragmente nedeklaruojame su extern?

Darant prielaidą, kad somefile.h yra var apibrėžimas, ši programa bus sėkmingai kompiliuojama. „Extern“ raktinis žodis naudojamas kintamajam, kai deklaruojame kintamąjį viename faile ir apibrėžiame jį kitame faile. Bet čia, kai importuosime tą patį failą į failą, kuriame jis deklaruotas, čia bus sugeneruota kompiliatoriaus klaida.

Taip yra todėl, kad faile, kuriame deklaravome tą kintamąjį, vis tiek turime naudoti išorinį raktinį žodį, kad praneštume savo kompiliatoriui, kad šis kintamasis yra apibrėžtas kažkur kitur, o tik nebus skirta nauja atminties vieta, kitaip jis sukurs kitą atminties bloką Kuris raktinio žodžio „išorinis“ naudojimas nenaudingas.

iteratorius java žemėlapis

5 pavyzdys:

c




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

>

>

Ar manote, kad ši programa veiks? Na, štai dar viena staigmena iš C standartų. Jie sako, kad..jei kintamasis yra tik deklaruojamas, o su ta deklaracija taip pat pateikiamas iniciatorius, tada tam kintamajam bus skirta atmintis – kitaip tariant, tas kintamasis bus laikomas apibrėžtu. Todėl pagal C standartą ši programa bus sėkmingai kompiliuojama ir veiks.
Taigi tai buvo išankstinis išorinio raktinio žodžio C apžvalga.

Trumpai tariant, galime pasakyti:

  1. Deklaruoti galima bet kokį skaičių kartų, bet apibrėžti tik vieną kartą.
  2. išorinis raktinis žodis naudojamas išplėsti kintamųjų / funkcijų matomumą.
  3. Kadangi pagal numatytuosius nustatymus funkcijos matomos visoje programoje, funkcijų deklaracijose ar apibrėžimuose naudoti išorinio parametro nereikia. Jo naudojimas yra numanomas.
  4. Kai extern naudojamas su kintamuoju, jis tik deklaruojamas, neapibrėžiamas.
  5. Išimties tvarka, kai išorinis kintamasis deklaruojamas inicijuojant, jis taip pat laikomas kintamojo apibrėžimu.