logo

ārējais atslēgvārds valodā C

extern atslēgvārds C attiecas uz C mainīgajiem (datu objektiem) un C funkcijām. Būtībā ārējais atslēgvārds paplašina C mainīgo un C funkciju redzamību. Iespējams, tas ir iemesls, kāpēc tas tika nosaukts par ārējo.

Lai gan lielākā daļa cilvēku, iespējams, saprot atšķirību starp deklarāciju un mainīgā vai funkcijas definīciju, pilnības labad paskaidrosim to



    Mainīgā vai funkcijas deklarēšana vienkārši paziņo, ka mainīgais vai funkcija kaut kur programmā pastāv, bet atmiņa tiem nav atvēlēta. Mainīgā vai funkcijas deklarācijai ir svarīga loma — tā norāda programmai, kāds būs tās veids. Gadījumā, ja funkciju deklarācijas, tā arī norāda programmai argumentus, to datu tipus, šo argumentu secību un funkcijas atgriešanas veidu. Tātad tas viss par deklarāciju.
  • Nākot uz definīcija , kad mēs definēt mainīgais vai funkcija, papildus visam, ko dara deklarācija, tā arī piešķir atmiņu šim mainīgajam vai funkcijai. Tāpēc definīciju varam uzskatīt par deklarācijas virskopu (vai deklarāciju kā definīcijas apakškopu).
  • Extern ir īss vārds ārējam.
  • Ārējais mainīgais tiek izmantots, ja konkrētam failam ir jāpiekļūst mainīgajam no cita faila.

Extern sintakse valodā C

Sintakse, lai definētu ārējo mainīgo C valodā, ir tikai izmantot extern atslēgvārdu pirms mainīgā deklarācijas.

extern data_type variable_name;>

Ārējā mainīgā C piemērs

C








#include> > extern> int> a;>// int var; ->deklarācija un definīcija>> // extern int var; ->deklarācija>> int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

>

>

Ārējā mainīgā īpašības C

  • Kad mēs rakstām extern some_data_type some_mainable_name; nav piešķirta atmiņa. Tiek paziņota tikai mainīgā īpašība.
  • Failā ir atļautas vairākas ārējā mainīgā deklarācijas. Tas neattiecas uz automātiskiem mainīgajiem.
  • Ārējais mainīgais saka kompilatoram Iet ārpus manas darbības jomas, un jūs atradīsit mainīgā definīciju, kuru es deklarēju.
  • Kompilators uzskata, ka tas, ko teica ārējais mainīgais, ir patiess un nerada kļūdu. Linker rada kļūdu, ja konstatē, ka šāda mainīgā nav.
  • Kad tiek inicializēts ārējais mainīgais, tam tiek piešķirta atmiņa, un tas tiks uzskatīts par definētu.

Var būt mainīgais vai funkcija deklarēts vairākas reizes, bet tā var būt definēts tikai vienu reizi. (Atcerieties pamatprincipu, ka vienam un tam pašam mainīgajam vai funkcijai nevar būt divas atrašanās vietas).
Tagad atgriezieties pie ārējā atslēgvārda. Pirmkārt, apsveriet ārējā izmantošana funkcijās. Izrādās, ka tad, kad funkcija tiek deklarēta vai definēta, ārējais atslēgvārds tiek pieņemts netieši. Kad mēs rakstām.

int foo(int arg1, char arg2);>

Kompilators to apstrādā šādi:

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

Tā kā ārējais atslēgvārds paplašina funkcijas redzamību uz visu programmu, funkciju var izmantot (izsaukt) jebkurā vietā jebkurā visas programmas failā, ja šajos failos ir ietverta funkcijas deklarācija. (Kad funkcijas deklarācija ir vietā, kompilators zina, ka funkcijas definīcija pastāv kaut kur citur, un tas iet uz priekšu un apkopo failu). Tātad tas viss attiecas uz ārējo un funkcijām.
Tagad apskatīsim ārēja izmantošanu ar mainīgajiem. Lai sāktu, kā jūs to darītu paziņot mainīgais bez definējot tas? Jūs darītu kaut ko līdzīgu šim:

extern int var;>

Šeit ir deklarēts vesela skaitļa tipa mainīgais ar nosaukumu var (tas vēl nav definēts, tāpēc līdz šim nav piešķirta atmiņa par var). Un šo deklarāciju mēs varam darīt tik reižu, cik vēlamies.
Tagad, kā jūs to darītu definēt var? Jūs darītu šādi:

int var = 10;>

Šajā rindā ir deklarēts vesela skaitļa tipa mainīgais ar nosaukumu var un definēts (atcerieties to definīcija ir superkopa deklarācija ). Tā kā šī ir a definīcija , tiek piešķirta arī atmiņa var. Tagad šeit nāk pārsteigums. Kad mēs deklarējām/definējām funkciju, mēs redzējām, ka ārējais atslēgvārds bija netieši. Bet tas tā nav mainīgo lielumu gadījumā. Ja tā būtu, atmiņa viņiem nekad netiktu piešķirta. Tāpēc mums ir skaidri jāiekļauj ārējais atslēgvārds, ja mēs vēlamies deklarēt mainīgos, tos nedefinējot. Turklāt, tā kā ārējais atslēgvārds paplašina redzamību uz visu programmu, izmantojot ārējo atslēgvārdu ar mainīgo, mēs varam izmantot mainīgo jebkurā programmas vietā, ja mēs iekļaujam tā deklarāciju, mainīgais ir kaut kur definēts.
Tagad mēģināsim izprast ārējo ar piemēriem.

1. piemērs:

c




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

char uz virkni java

>

>

Šī programma tiek veiksmīgi kompilēta. var ir definēts (un netieši deklarēts) globāli.

2. piemērs:

c




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

>

>

Šī programma tiek veiksmīgi kompilēta. Šeit var ir deklarēts tikai. Piezīme var nekad netiek izmantots, tāpēc problēmas nerodas.

struct masīva c programmēšana

3. piemērs:

c




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

>

>

Šī programma rada kļūdu kompilācijā (saites fāzē, vairāk informācijas šeit), jo var ir deklarēts, bet nekur nav definēts. Būtībā var nav piešķirta atmiņa. Un programma mēģina mainīt mainīgā lieluma vērtību uz 10, kas vispār neeksistē.

4. piemērs:

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>

>

>

Izvade:

10>

Piezīme: Šeit rodas vēl viens scenārijs, ja mēs iepriekš minētajā koda fragmentā nedeklarējam ar extern,?

Ņemot vērā pieņēmumu, ka failā somefile.h ir ietverta var definīcija, šī programma tiks veiksmīgi kompilēta. Atslēgvārds “extern” tiek izmantots mainīgajam, kad mēs deklarējam mainīgo vienā failā un definējam to citā failā. Bet šeit, importējot to pašu failu failā, kurā tas ir deklarēts, šeit tiks ģenerēta kompilatora kļūda.

Tas ir tāpēc, ka mums joprojām ir jāizmanto ārējais atslēgvārds failā, kurā mēs esam deklarējuši šo mainīgo, lai pateiktu mūsu kompilatoram, ka šis mainīgais ir definēts kaut kur citur, nevis tiks piešķirta tikai jauna atmiņas vieta, pretējā gadījumā tiks izveidots cits atmiņas bloks kuram atslēgvārda 'ārējais' lietojums ir bezjēdzīgs.

5. piemērs:

c

java lasīt csv




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

>

>

Vai jūs domājat, ka šī programma darbosies? Nu, lūk, nāk vēl viens pārsteigums no C standartiem. Viņi saka, ka .. ja mainīgais ir tikai deklarēts un ar šo deklarāciju tiek nodrošināts arī inicialators, tad šim mainīgajam tiks piešķirta atmiņa, citiem vārdiem sakot, šis mainīgais tiks uzskatīts par definētu. Tāpēc saskaņā ar C standartu šī programma veiksmīgi tiks apkopota un darbosies.
Tātad tas bija sākotnējais ieskats ārējā atslēgvārdā C.

Īsumā mēs varam teikt:

  1. Deklarāciju var veikt neierobežotu skaitu reižu, bet definēt tikai vienu reizi.
  2. ārējais atslēgvārds tiek izmantots, lai paplašinātu mainīgo/funkciju redzamību.
  3. Tā kā funkcijas pēc noklusējuma ir redzamas visā programmā, ārējais nav nepieciešams funkciju deklarācijās vai definīcijās. Tās izmantošana ir netieša.
  4. Ja ārējais tiek izmantots ar mainīgo, tas tiek tikai deklarēts, nevis definēts.
  5. Izņēmuma kārtā, kad ārējais mainīgais tiek deklarēts ar inicializāciju, tas tiek ņemts arī par mainīgā definīciju.