Kľúčové slovo extern v jazyku C sa vzťahuje na premenné C (dátové objekty) a funkcie C. Kľúčové slovo extern v podstate rozširuje viditeľnosť C premenných a C funkcií. To je pravdepodobne dôvod, prečo dostal názov externé.
Hoci väčšina ľudí pravdepodobne chápe rozdiel medzi deklaráciou a definíciou premennej alebo funkcie, pre úplnosť si to ujasnime
- Deklarácia premennej alebo funkcie jednoducho deklaruje, že premenná alebo funkcia niekde v programe existuje, ale nie je pre ne pridelená pamäť. Deklarácia premennej alebo funkcie zohráva dôležitú úlohu – hovorí programu, aký bude jej typ. V prípade funkciu deklarácií, tiež informuje program o argumentoch, ich dátových typoch, poradí týchto argumentov a návratovom type funkcie. Takže to je všetko o vyhlásení.
- Príchod k definícia , Keď sme definovať premenná alebo funkcia, okrem všetkého, čo robí deklarácia, tiež alokuje pamäť pre túto premennú alebo funkciu. Preto si definíciu môžeme predstaviť ako nadmnožinu deklarácie (alebo deklaráciu ako podmnožinu definície).
- Extern je krátky názov pre externé.
- Externá premenná sa používa, keď určité súbory potrebujú prístup k premennej z iného súboru.
Syntax externa v C
Syntax na definovanie externej premennej v C je len použiť kľúčové slovo extern pred deklaráciou premennej.
extern data_type variable_name;>
Príklad externej premennej v C
C
vek peta davidsona
#include> > extern> int> a;>// int var; ->deklarácia a definícia> >// extern int var; ->vyhlásenie> > int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }> |
>
>
Vlastnosti externej premennej v C
- Keď napíšeme extern some_data_type some_variable_name; nie je pridelená žiadna pamäť. Oznamuje sa len vlastnosť premennej.
- V rámci súboru sú povolené viaceré deklarácie externej premennej. Toto nie je prípad automatických premenných.
- Externá premenná hovorí kompilátoru Choď mimo môj rozsah a nájdete definíciu premennej, ktorú som deklaroval.
- Kompilátor verí, že čokoľvek, čo táto externá premenná povedala, je pravda a nevyvoláva žiadnu chybu. Linker vyvolá chybu, keď zistí, že takáto premenná neexistuje.
- Keď sa inicializuje externá premenná, pridelí sa na to pamäť a bude sa považovať za definovanú.
Premenná alebo funkcia môže byť vyhlásil koľkokrát, ale môže byť definované iba raz. (Pamätajte na základný princíp, že nemôžete mať dve miesta rovnakej premennej alebo funkcie).
Teraz späť k externému kľúčovému slovu. Najprv zvážme použitie externého zdroja vo funkciách. Ukazuje sa, že keď je funkcia deklarovaná alebo definovaná, kľúčové slovo extern sa implicitne predpokladá. Keď píšeme.
int foo(int arg1, char arg2);>
Kompilátor to považuje za:
extern int foo(int arg1, char arg2);>
Keďže kľúčové slovo extern rozširuje viditeľnosť funkcie na celý program, funkciu možno použiť (zavolať) kdekoľvek v ktoromkoľvek zo súborov celého programu za predpokladu, že tieto súbory obsahujú deklaráciu funkcie. (S deklaráciou funkcie kompilátor vie, že definícia funkcie existuje niekde inde a pokračuje a kompiluje súbor). Takže to je všetko o vonkajšku a funkciách.
Teraz zvážime použitie externého s premennými. Na začiatok, ako by ste vyhlásiť premenná bez definovanie to? Urobili by ste niečo takéto:
extern int var;>
Tu bola deklarovaná premenná celočíselného typu s názvom var (zatiaľ nebola definovaná, takže zatiaľ nie je pre var pridelená žiadna pamäť). A toto vyhlásenie môžeme urobiť toľkokrát, koľkokrát chceme.
Teraz, ako by ste definovať var? Urobili by ste toto:
int var = 10;>
V tomto riadku bola deklarovaná premenná celočíselného typu s názvom var a definované (pamätajte na to definícia je nadmnožinou vyhlásenie ). Keďže toto je a definícia , je alokovaná aj pamäť pre var. Teraz prichádza prekvapenie. Keď sme deklarovali/definovali funkciu, videli sme, že kľúčové slovo extern bolo prítomné implicitne. Ale to nie je prípad premenných. Ak by to tak bolo, pamäť by im nikdy nebola pridelená. Preto musíme explicitne zahrnúť kľúčové slovo extern, keď chceme deklarovať premenné bez toho, aby sme ich definovali. Keďže kľúčové slovo extern rozširuje viditeľnosť na celý program, pomocou kľúčového slova extern s premennou môžeme premennú použiť kdekoľvek v programe za predpokladu, že zahrnieme jej deklaráciu, že premenná je niekde definovaná.
Teraz sa pokúsme pochopiť externé príklady.
Príklad 1:
c
int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Tento program sa úspešne skompiluje. var je definovaný (a implicitne deklarovaný) globálne.
Príklad 2:
c
javascriptové výstražné pole
extern> int> var;> int> main(>void>)> {> >return> 0;> }> |
>
>
Tento program sa úspešne skompiluje. Tu je deklarovaná iba var. Upozornenie var sa nikdy nepoužíva, takže nevznikajú žiadne problémy.
Príklad 3:
c
java previesť reťazec na celé číslo
extern> int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Tento program vyhodí chybu v kompilácii (počas fázy spájania, viac informácií tu), pretože var je deklarovaný, ale nie je nikde definovaný. V podstate var nemá pridelenú žiadnu pamäť. A program sa pokúša zmeniť hodnotu na 10 premennej, ktorá vôbec neexistuje.
Príklad 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> |
>
npm vymazať vyrovnávaciu pamäť
>
Výkon:
10>
Poznámka: Tu vzniká ďalší scenár, čo ak vo vyššie uvedenom úryvku kódu nedeklarujeme s externou,?
Ak vezmeme do úvahy predpoklad, že somefile.h obsahuje definíciu var, tento program sa úspešne skompiluje. Kľúčové slovo „extern“ sa používa pre premennú, keď premennú deklarujeme v jednom súbore a definujeme ju v inom súbore. Ale keď importujeme rovnaký súbor do súboru, kde je deklarovaný, tu sa vygeneruje chyba kompilátora.
Je to preto, že stále musíme použiť kľúčové slovo extern v súbore, kde sme túto premennú deklarovali, aby sme nášmu kompilátoru povedali, že táto premenná je definovaná niekde inde, než že nebude pridelený iba nový pamäťový priestor, inak sa vytvorí ďalší pamäťový blok použitie „externého“ kľúčového slova je zbytočné.
Príklad 5:
c
extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Myslíte si, že tento program bude fungovať? No, prichádza ďalšie prekvapenie zo štandardov C. Hovorí sa, že ak je premenná iba deklarovaná a s touto deklaráciou je poskytnutý aj inicializátor, potom sa pamäť pre túto premennú pridelí – inými slovami, táto premenná sa bude považovať za definovanú. Preto sa tento program podľa štandardu C úspešne skompiluje a bude fungovať.
Takže to bol predbežný pohľad na externé kľúčové slovo v C.
V skratke môžeme povedať:
- Deklaráciu je možné vykonať ľubovoľne, ale definovať iba raz.
- kľúčové slovo extern sa používa na rozšírenie viditeľnosti premenných/funkcií.
- Keďže funkcie sú štandardne viditeľné v celom programe, použitie externého nie je potrebné v deklaráciách alebo definíciách funkcií. Jeho použitie je implicitné.
- Keď sa externá používa s premennou, je iba deklarovaná, nie definovaná.
- Výnimkou je, že keď je externá premenná deklarovaná s inicializáciou, berie sa to aj ako definícia premennej.