logo

eksternt nøkkelord i C

eksternt nøkkelord i C gjelder C-variabler (dataobjekter) og C-funksjoner. I utgangspunktet utvider det eksterne nøkkelordet synligheten til C-variablene og C-funksjonene. Det er sannsynligvis grunnen til at den ble kalt ekstern.

Selv om de fleste sannsynligvis forstår forskjellen mellom deklarasjonen og definisjonen av en variabel eller funksjon, la oss for fullstendighetens skyld avklare det



    Deklarering av en variabel eller funksjon erklærer ganske enkelt at variabelen eller funksjonen eksisterer et sted i programmet, men minnet er ikke allokert for dem. Deklarasjonen av en variabel eller funksjon har en viktig rolle - den forteller programmet hva dens type skal være. I tilfelle av funksjon erklæringer, forteller den også programmet argumentene, deres datatyper, rekkefølgen på disse argumentene og returtypen til funksjonen. Så det handler om erklæringen.
  • Kommer til definisjon , når vi definere en variabel eller funksjon, i tillegg til alt som en erklæring gjør, allokerer den også minne for den variabelen eller funksjonen. Derfor kan vi tenke på definisjonen som et supersett av erklæringen (eller erklæringen som en delmengde av definisjonen).
  • Ekstern er et kort navn på ekstern.
  • Den eksterne variabelen brukes når en bestemt fil trenger tilgang til en variabel fra en annen fil.

Syntaks for ekstern i C

Syntaksen for å definere en ekstern variabel i C er bare å bruke det eksterne nøkkelordet før variabeldeklarasjonen.

extern data_type variable_name;>

Eksempel på ekstern variabel i C

C








#include> > extern> int> a;>// int var; ->erklæring og definisjon> >// extern int var; ->erklæring> > int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

tostring metode java
>

>

Egenskaper til ekstern variabel i C

  • Når vi skriver ekstern some_data_type some_variable_name; ingen minne er tildelt. Kun egenskapen til variabelen kunngjøres.
  • Flere erklæringer av ekstern variabel er tillatt i filen. Dette er ikke tilfellet med automatiske variabler.
  • Den eksterne variabelen sier til kompilatoren Gå utenfor mitt område og du vil finne definisjonen av variabelen som jeg erklærte.
  • Kompilatoren mener at uansett hva den eksterne variabelen sa er sant og gir ingen feil. Linker kaster en feil når den finner at ingen slik variabel eksisterer.
  • Når en ekstern variabel initialiseres, tildeles minne for denne og den vil bli ansett som definert.

En variabel eller funksjon kan være erklært et hvilket som helst antall ganger, men det kan være det definert bare én gang. (Husk det grunnleggende prinsippet om at du ikke kan ha to plasseringer av samme variabel eller funksjon).
Nå tilbake til det eksterne nøkkelordet. Først, la oss vurdere bruken av ekstern i funksjoner. Det viser seg at når en funksjon er deklarert eller definert, antas det eksterne nøkkelordet implisitt. Når vi skriver.

int foo(int arg1, char arg2);>

Kompilatoren behandler det som:

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

Siden det eksterne nøkkelordet utvider funksjonens synlighet til hele programmet, kan funksjonen brukes (kalles) hvor som helst i alle filene i hele programmet, forutsatt at disse filene inneholder en erklæring om funksjonen. (Med erklæringen om funksjonen på plass, vet kompilatoren at definisjonen av funksjonen eksisterer et annet sted, og den går videre og kompilerer filen). Så det handler om ekstern og funksjoner.
La oss nå vurdere bruken av ekstern med variabler. Til å begynne med, hvordan ville du erklære en variabel uten definere den? Du ville gjort noe sånt som dette:

extern int var;>

Her er en heltallsvariabel kalt var blitt erklært (den er ikke definert ennå, så ingen minneallokering for var så langt). Og vi kan gjøre denne erklæringen så mange ganger vi vil.
Nå, hvordan ville du definere var? Du ville gjort dette:

int var = 10;>

På denne linjen er en heltallstypevariabel kalt var begge blitt erklært og definert (husk det definisjon er supersettet av erklæring ). Siden dette er en definisjon , minnet for var er også tildelt. Nå kommer overraskelsen her. Når vi deklarerte/definerte en funksjon, så vi at det eksterne nøkkelordet var tilstede implisitt. Men dette er ikke tilfelle med variabler. Hvis det var det, ville minnet aldri blitt tildelt dem. Derfor må vi inkludere det eksterne nøkkelordet eksplisitt når vi ønsker å deklarere variabler uten å definere dem. Dessuten, ettersom det eksterne nøkkelordet utvider synligheten til hele programmet, ved å bruke det eksterne nøkkelordet med en variabel, kan vi bruke variabelen hvor som helst i programmet forutsatt at vi inkluderer dens erklæring, at variabelen er definert et sted.
La oss nå prøve å forstå ekstern med eksempler.

Eksempel 1:

c


tilfeldig rekkefølge sql



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

>

>

Dette programmet kompileres vellykket. var er definert (og erklært implisitt) globalt.

Eksempel 2:

c




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

>

>

Dette programmet kompileres vellykket. Her er kun var deklarert. Merk at var aldri brukes, så det oppstår ingen problemer.

Eksempel 3:

c


imessage-spill på Android



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

>

dataarbeid
>

Dette programmet kaster en feil i kompileringen (under koblingsfasen, mer info her ) fordi var er deklarert, men ikke definert noe sted. I hovedsak er varen ikke tildelt noe minne. Og programmet prøver å endre verdien til 10 for en variabel som ikke eksisterer i det hele tatt.

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

>

>

Produksjon:

10>

Merk: Her oppstår et annet scenario hva om vi ikke erklærer med extern i kodebiten ovenfor,?

Tatt i betraktning en antagelse om at somefile.h inneholder definisjonen av var, vil dette programmet kompilere vellykket. 'ekstern' nøkkelord brukes for en variabel når vi erklærer variabelen i en fil og definerer den i en annen fil. Men her når vi importerer den samme filen i filen der den er deklarert, vil det genereres en kompilatorfeil.

Det er fordi vi fortsatt må bruke det eksterne nøkkelordet i filen der vi har deklarert den variabelen for å fortelle kompilatoren vår at denne variabelen er definert et annet sted enn at bare ny minneplass ikke vil bli tildelt, ellers vil det lage en annen minneblokk hvilken bruk av 'ekstern' søkeord ubrukelig.

Eksempel 5:

c




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

>

>

Tror du dette programmet vil fungere? Vel, her kommer nok en overraskelse fra C-standarder. De sier at..hvis en variabel bare er deklarert og en initialisering også er utstyrt med den deklarasjonen, vil minnet for den variabelen bli allokert – med andre ord, den variabelen vil bli betraktet som definert. Derfor, i henhold til C-standarden, vil dette programmet kompilere vellykket og fungere.
Så det var en foreløpig titt på det eksterne nøkkelordet i C.

Kort oppsummert kan vi si:

  1. En erklæring kan gjøres et hvilket som helst antall ganger, men kun definert én gang.
  2. det eksterne nøkkelordet brukes til å utvide synligheten av variabler/funksjoner.
  3. Siden funksjoner er synlige i hele programmet som standard, er bruken av ekstern ikke nødvendig i funksjonsdeklarasjoner eller definisjoner. Bruken er implisitt.
  4. Når ekstern brukes med en variabel, er den bare deklarert, ikke definert.
  5. Som et unntak, når en ekstern variabel er deklarert med initialisering, tas den også som definisjon av variabelen.