cuvântul cheie extern în C se aplică variabilelor C (obiecte de date) și funcțiilor C. Practic, cuvântul cheie extern extinde vizibilitatea variabilelor C și a funcțiilor C. Acesta este probabil motivul pentru care a fost numit extern.
Deși majoritatea oamenilor înțeleg probabil diferența dintre declarația și definiția unei variabile sau funcție, de dragul completității, haideți să o clarificăm
- Declararea unei variabile sau funcție declară pur și simplu că variabila sau funcția există undeva în program, dar memoria nu este alocată pentru acestea. Declarația unei variabile sau funcție are un rol important – spune programului care va fi tipul acesteia. În cazul în care funcţie declarații, îi spune programului și argumentele, tipurile de date ale acestora, ordinea acelor argumente și tipul de returnare al funcției. Deci asta este totul despre declarație.
- Venind la definiție , cand noi defini o variabilă sau funcție, pe lângă tot ceea ce face o declarație, alocă și memorie pentru acea variabilă sau funcție. Prin urmare, ne putem gândi la definiție ca la un superset al declarației (sau declarația ca un subset al definiției).
- Extern este un nume scurt pentru extern.
- Variabila extern este utilizată atunci când un anumit fișier trebuie să acceseze o variabilă dintr-un alt fișier.
Sintaxa lui extern în C
Sintaxa pentru a defini o variabilă extern în C este doar să folosiți cuvântul cheie extern înainte de declararea variabilei.
extern data_type variable_name;>
Exemplu de variabilă externă în C
C
#include> > extern> int> a;>// int var; ->declaraţie şi definiţie>>> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }> |
sortați o listă de matrice în java
>
>
Proprietățile variabilei externe în C
- Când scriem extern some_data_type some_variable_name; nu este alocată nicio memorie. Se anunță numai proprietatea variabilei.
- Declarațiile multiple ale variabilei externe sunt permise în fișier. Acesta nu este cazul variabilelor automate.
- Variabila extern îi spune compilatorului Mergeți în afara domeniului meu și veți găsi definiția variabilei pe care am declarat-o.
- Compilatorul consideră că orice a spus variabila externă este adevărat și nu produce nicio eroare. Linker aruncă o eroare când constată că nu există o astfel de variabilă.
- Când o variabilă externă este inițializată, atunci memorie pentru aceasta este alocată și va fi considerată definită.
O variabilă sau o funcție poate fi declarat de câte ori, dar poate fi definit doar o data. (Amintiți-vă de principiul de bază că nu puteți avea două locații ale aceleiași variabile sau funcție).
Acum reveniți la cuvântul cheie extern. În primul rând, să luăm în considerare utilizarea extern în funcții. Rezultă că atunci când o funcție este declarată sau definită, cuvântul cheie extern este implicit presupus. Când scriem.
int foo(int arg1, char arg2);>
Compilatorul îl tratează ca:
extern int foo(int arg1, char arg2);>
Deoarece cuvântul cheie extern extinde vizibilitatea funcției la întregul program, funcția poate fi utilizată (numită) oriunde în oricare dintre fișierele întregului program, cu condiția ca acele fișiere să conțină o declarație a funcției. (Cu declarația funcției în loc, compilatorul știe că definiția funcției există în altă parte și merge mai departe și compilează fișierul). Deci totul este despre extern și funcții.
Acum să luăm în considerare utilizarea extern cu variabile. Pentru început, cum ai face declara o variabilă fără definire aceasta? Ai face ceva de genul asta:
extern int var;>
Aici, a fost declarată o variabilă de tip întreg numită var (nu a fost încă definită, deci până acum nu a fost alocat memorie pentru var). Și putem face această declarație de câte ori vrem.
Acum, cum ai face defini var? Ai face asta:
int var = 10;>
În această linie, o variabilă de tip întreg numită var a fost ambele declarată și definit (amintiți-vă că definiție este supersetul de declaraţie ). Deoarece acesta este un definiție , este alocată și memoria pentru var. Acum vine surpriza. Când am declarat/definit o funcție, am văzut că cuvântul cheie extern era prezent implicit. Dar nu este cazul variabilelor. Dacă ar fi, memoria nu le-ar fi alocată niciodată. Prin urmare, trebuie să includem explicit cuvântul cheie extern atunci când dorim să declarăm variabile fără a le defini. De asemenea, deoarece cuvântul cheie extern extinde vizibilitatea la întregul program, prin utilizarea cuvântului cheie extern cu o variabilă, putem folosi variabila oriunde în program cu condiția să includem declarația sa că variabila este definită undeva.
Acum să încercăm să înțelegem extern cu exemple.
Exemplul 1:
c
int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Acest program se compila cu succes. var este definită (și declarată implicit) global.
Exemplul 2:
c
python generează uuid
extern> int> var;> int> main(>void>)> {> >return> 0;> }> |
>
>
Acest program se compila cu succes. Aici var este declarat numai. Notice var nu este niciodată folosită, așa că nu apar probleme.
Exemplul 3:
c
extern> int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
Android poate juca gamepigeon
>
>
Acest program aruncă o eroare în compilare (în timpul fazei de conectare, mai multe informații aici) deoarece var este declarat, dar nu este definit nicăieri. În esență, varului nu i se aloca nicio memorie. Și programul încearcă să schimbe valoarea la 10 a unei variabile care nu există deloc.
Exemplul 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> |
>
>
Ieșire:
10>
Notă: Aici apare un alt scenariu, ce dacă nu declarăm cu extern în fragmentul de cod de mai sus,?
șir la int
Luând în considerare presupunerea că somefile.h conține definiția var, acest program se va compila cu succes. cuvântul cheie „extern” este folosit pentru o variabilă atunci când declarăm variabila într-un fișier și o definim într-un alt fișier. Dar aici când importăm același fișier în fișierul în care este declarat, aici va fi generată o eroare de compilator.
Se datorează faptului că mai trebuie să folosim cuvântul cheie extern în fișierul în care am declarat acea variabilă, astfel încât să spunem compilatorului nostru că această variabilă a fost definită în altă parte decât nu va fi alocat doar spațiu de memorie nou, altfel va crea un alt bloc de memorie. care utilizarea cuvântului cheie „extern” este inutilă.
Exemplul 5:
c
extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Crezi că acest program va funcționa? Ei bine, aici vine o altă surpriză de la standardele C. Ei spun că... dacă o variabilă este doar declarată și un inițializator este, de asemenea, furnizat cu declarația respectivă, atunci memoria pentru acea variabilă va fi alocată - cu alte cuvinte, acea variabilă va fi considerată ca definită. Prin urmare, conform standardului C, acest program se va compila cu succes și va funcționa.
Deci, aceasta a fost o privire preliminară asupra cuvântului cheie extern din C.
Pe scurt, putem spune:
- O declarație poate fi făcută de orice număr de ori, dar definită o singură dată.
- cuvântul cheie extern este folosit pentru a extinde vizibilitatea variabilelor/funcțiilor.
- Deoarece funcțiile sunt vizibile în program în mod implicit, utilizarea extern nu este necesară în declarațiile sau definițiile funcției. Utilizarea lui este implicită.
- Când extern este folosit cu o variabilă, este doar declarată, nu definită.
- Ca o excepție, atunci când o variabilă externă este declarată cu inițializare, aceasta este luată și ca definiție a variabilei.