logo

eksternt søgeord i C

eksternt nøgleord i C gælder for C-variabler (dataobjekter) og C-funktioner. Grundlæggende udvider det eksterne nøgleord synligheden af ​​C-variablerne og C-funktionerne. Det er sandsynligvis grunden til, at den blev navngivet ekstern.

Selvom de fleste mennesker nok forstår forskellen mellem erklæringen og definitionen af ​​en variabel eller funktion, lad os for fuldstændighedens skyld præcisere det



    Deklaration af en variabel eller funktion erklærer blot, at variablen eller funktionen findes et sted i programmet, men hukommelsen er ikke allokeret til dem. Deklarationen af ​​en variabel eller funktion tjener en vigtig rolle - den fortæller programmet, hvad dets type vil være. I tilfælde af fungere erklæringer, fortæller den også programmet argumenterne, deres datatyper, rækkefølgen af ​​disse argumenter og funktionens returtype. Så det handler om erklæringen.
  • Kommer til definition , når vi Definere en variabel eller funktion, udover alt, hvad en erklæring gør, allokerer den også hukommelse til den pågældende variabel eller funktion. Derfor kan vi tænke på definitionen som et supersæt af erklæringen (eller erklæring som en delmængde af definitionen).
  • Ekstern er et kort navn for ekstern.
  • Den eksterne variabel bruges, når en bestemt fil skal have adgang til en variabel fra en anden fil.

Syntaks for ekstern i C

Syntaksen til at definere en ekstern variabel i C er blot at bruge det eksterne nøgleord før variabeldeklarationen.

extern data_type variable_name;>

Eksempel på ekstern variabel i C

C








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

tostring metode java
>

>

Egenskaber for ekstern variabel i C

  • Når vi skriver ekstern some_data_type some_variable_name; ingen hukommelse er tildelt. Kun variablens egenskab meddeles.
  • Flere erklæringer af ekstern variabel er tilladt i filen. Dette er ikke tilfældet med automatiske variable.
  • Den eksterne variabel siger til compileren Gå uden for mit område, og du vil finde definitionen af ​​den variabel, som jeg erklærede.
  • Compileren mener, at hvad end den eksterne variabel sagde, er sandt og giver ingen fejl. Linkeren kaster en fejl, når den finder, at der ikke findes en sådan variabel.
  • Når en ekstern variabel initialiseres, tildeles hukommelse til denne, og den vil blive betragtet som defineret.

En variabel eller funktion kan være erklæret et hvilket som helst antal gange, men det kan være defineret kun én gang. (Husk det grundlæggende princip, at du ikke kan have to placeringer af samme variabel eller funktion).
Nu tilbage til det eksterne nøgleord. Lad os først overveje brugen af ​​ekstern i funktioner. Det viser sig, at når en funktion er erklæret eller defineret, antages det eksterne nøgleord implicit. Når vi skriver.

int foo(int arg1, char arg2);>

Compileren behandler det som:

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

Da det eksterne nøgleord udvider funktionens synlighed til hele programmet, kan funktionen bruges (kaldes) hvor som helst i alle filerne i hele programmet, forudsat at disse filer indeholder en erklæring om funktionen. (Med erklæringen af ​​funktionen på plads, ved compileren, at definitionen af ​​funktionen findes et andet sted, og den går videre og kompilerer filen). Så det handler om ekstern og funktioner.
Lad os nu overveje brugen af ​​ekstern med variabler. Til at begynde med, hvordan ville du erklære en variabel uden definerende det? Du ville gøre noget som dette:

extern int var;>

Her er en heltalsvariabel kaldet var blevet erklæret (den er ikke defineret endnu, så ingen hukommelsesallokering for var indtil videre). Og vi kan gøre denne erklæring så mange gange, vi vil.
Hvordan ville du nu Definere var? Du ville gøre dette:

int var = 10;>

På denne linje er en heltalstypevariabel kaldet var begge blevet erklæret og defineret (husk det definition er supersættet af erklæring ). Da dette er en definition , er hukommelsen for var også tildelt. Nu kommer overraskelsen. Da vi erklærede/definerede en funktion, så vi, at det eksterne nøgleord var til stede implicit. Men dette er ikke tilfældet med variabler. Hvis det var, ville hukommelsen aldrig blive tildelt dem. Derfor er vi nødt til at inkludere det eksterne nøgleord eksplicit, når vi ønsker at erklære variabler uden at definere dem. Da det eksterne nøgleord udvider synligheden til hele programmet, kan vi ved at bruge det eksterne nøgleord med en variabel bruge variablen hvor som helst i programmet, forudsat at vi inkluderer dens erklæring, at variablen er defineret et sted.
Lad os nu prøve at forstå ekstern med eksempler.

Eksempel 1:

c


fjederstøvle



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

>

>

Dette program kompileres med succes. var defineres (og erklæres implicit) globalt.

Eksempel 2:

c




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

>

>

Dette program kompileres med succes. Her deklareres kun var. Bemærk var bliver aldrig brugt, så der opstår ingen problemer.

Eksempel 3:

c


imessage spil på Android



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

>

syreegenskabsdatabase
>

Dette program kaster en fejl i kompileringen (under sammenkædningsfasen, mere info her), fordi var er erklæret, men ikke defineret nogen steder. I det væsentlige er varen ikke tildelt nogen hukommelse. Og programmet forsøger at ændre værdien til 10 for en variabel, der slet ikke eksisterer.

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>

>

>

Produktion:

10>

Bemærk: Her opstår et andet scenarie, hvad hvis vi ikke erklærer med extern i ovenstående kodestykke,?

I betragtning af en antagelse om, at somefile.h indeholder definitionen af ​​var, vil dette program kompilere med succes. 'ekstern' nøgleord bruges til en variabel, når vi erklærer variablen i en fil og definerer den i en anden fil. Men her, når vi importerer den samme fil i filen, hvor den er erklæret, vil der her genereres en kompileringsfejl.

Det er fordi vi stadig skal bruge det eksterne nøgleord i filen, hvor vi har erklæret den variabel for at fortælle vores compiler, at denne variabel er blevet defineret et andet sted end kun ny hukommelsesplads vil ikke blive allokeret ellers vil det skabe en anden hukommelsesblok hvilken brug af 'ekstern' søgeord ubrugelig.

Eksempel 5:

c




java konverter char til int
extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Tror du, at dette program vil fungere? Nå, her kommer endnu en overraskelse fra C-standarder. De siger, at..hvis en variabel kun er deklareret, og en initialisering også er forsynet med den erklæring, så vil hukommelsen for den variabel blive allokeret - med andre ord, den variabel vil blive betragtet som defineret. Derfor vil dette program i henhold til C-standarden kompilere med succes og fungere.
Så det var et foreløbigt kig på det eksterne nøgleord i C.

Kort sagt kan vi sige:

  1. En erklæring kan udføres et vilkårligt antal gange, men kun defineret én gang.
  2. det eksterne nøgleord bruges til at udvide synligheden af ​​variabler/funktioner.
  3. Da funktioner er synlige i hele programmet som standard, er brugen af ​​den eksterne ikke nødvendig i funktionsdeklarationer eller definitioner. Dens brug er implicit.
  4. Når ekstern bruges med en variabel, er den kun erklæret, ikke defineret.
  5. Som en undtagelse, når en ekstern variabel er erklæret med initialisering, tages den også som definition af variablen.