C de programare
O variabilă poate fi definită la un nivel extern în interiorul fișierului sursă o singură dată. Dacă este specificat specificatorul de clasă de memorie statică. În alte fișiere sursă pot fi definite variabile cu același nume. Deoarece fiecare definiție statică este vizibilă numai în propriul fișier sursă, nu va exista niciun conflict.
C de programare
extern int i; / * referință la i definit mai jos * /
printf (". \ n", i); / * i este egal cu 4 * / următor ();
int i = 3; / * definirea lui i * / next ()
printf (". \ n", i); / * i este egal cu 5 * / alte ();
C de programare
Specificatorul de registru al registrelor îi spune compilatorului să aloce memoria unei variabile din registru, dacă este posibil. Utilizarea memoriei de registru are de obicei un timp de acces mai rapid și o dimensiune mai mică a codului rezultat. Variabilele declarate cu clasa de registru au aceeași vizibilitate ca și variabilele automate.
O variabilă declarată intern cu un specificator de clasă de memorie statică. are o durată globală de viață și are vizibilitate numai în cadrul blocului în care este declarat. Spre deosebire de variabilele auto. variabilele declarate ca fiind statice. își păstrează valoarea la sfârșitul blocului.
Variabilele clasei de memorie statică pot fi inițializate cu o expresie constantă. Dacă nu există o inițializare explicită, variabila clasei de memorie statică
C de programare
este setat automat la 0. Inițializarea este efectuată o dată la momentul compilării. Initializarea variabilei clasei de memorie statica nu se repeta atunci cand se face o intrare noua a blocului.
Variabila declarată cu specificatorul clasei de memorie externă. este o referință la o variabilă cu același nume definită la nivel extern în orice fișier de program sursă.
Exemplu: int i = 1; main ()
/ * referință la i, definită mai sus * / extern int i;
/ * valoarea inițială este zero; a este vizibil numai în interiorul principal * / static;
/ * b este stocat într-un registru, dacă este posibil * / register int b = 0;
/ * clasa de stocare implicită este auto * / int c = 0;
/ * valorile tipărite sunt 1, 0, 0, 0 * / printf (". \ n. \ n. \ n", i, a, b, c); altele ();
/ * i este redefinit * / int i = 16;
/ * acest a este vizibil numai în alte * / static int a = 2;
/ * valorile tipărite sunt 16, 4 * / printf (". \ n. \ n", i, a);
C de programare
variabilă externă i. Variabila clasei de memorie statică este setată automat la 0. Deoarece inițializatorul este omis. Apelarea funcției de imprimare (presupunând că funcția de imprimare este definită la un moment dat în programul sursă) imprimă valorile 1. 0. 0. 0.
În funcția altul. variabila i este suprascrisă ca variabilă locală cu o valoare inițială de 16. Aceasta nu afectează valoarea variabilei externe i. Variabila a este declarată ca o variabilă a clasei de memorie statică cu o valoare inițială de 2. Aceasta nu contrazice variabila a. declarată în funcția principală. deoarece vizibilitatea variabilelor clasei de memorie statică la nivelul intern este limitată de blocul în care este declarată.
Funcțiile pot fi declarate cu specificatorii clasei de memorie statică sau externă. Funcțiile au întotdeauna o viață globală.
Funcțiile declarate externe sunt vizibile în toate fișierele sursă care alcătuiesc programul. Orice funcție poate apela funcția externă.
În mod sintaxic, inițializatorul este precedat de un semn
C de programare
Variabilele declarate la nivel extern pot fi inițializate. Dacă nu sunt inițializate în mod explicit, acestea sunt setate la zero la timpul de compilare sau la timpul de conectare. Orice variabilă declarată cu specificatorul de clasă de memorie statică. pot fi inițializate cu o expresie constantă. Inițializarea variabilelor statice este efectuată o dată la momentul compilării. Dacă nu există o inițializare explicită, variabilele din clasa de memorie statică sunt automat setate la zero.
Tipuri de bază și tipuri de indicatori
Valoarea expresiei este atribuită variabilei. Pentru expresie, regulile de conversie sunt permise.
C de programare
Lista inițializatorilor
Pentru fiecare listă de inițializare, valorile expresiilor constante sunt atribuite în ordinea elementelor variabilei compozite. Când alinierea este inițializată, lista de inițializatori este o expresie constantă unică. Valoarea expresiei constante este atribuită primului element de aliniere.
Dacă există mai puține valori în lista de inițializare decât există în tipul compus, memoria rămasă este inițializată la zero. Dacă numărul de valori de inițializare este mai mare decât este necesar, se emite o eroare.
Aceste reguli se aplică fiecărei liste imbricate de inițializatori, la fel ca întreaga structură ca întreg.
Aceste virgule suplimentare sunt permise, dar nu sunt obligatorii. Numai virgulele care separă expresiile constante și listele de inițializare sunt necesare. Dacă lista inițializatorilor nu este structurată pentru un obiect compus, valorile sale sunt atribuite în ordinea în care elementele obiectului sunt stocate.
Parantezele curbate pot apărea, de asemenea, în jurul inițializatorilor individuali din listă.
Atunci când sunt inițializate variabilele compuse, trebuie să aveți grijă să folosiți corect cotierele curbate și listele de inițializatori. Următorul exemplu ilustrează în detaliu interpretarea interpreților de către compilator.
C de programare
O matrice poate fi inițializată cu o literă mică.
codul de caractere [] = "abc";
inițializează codul ca o serie de caractere din patru elemente. Al patrulea element este simbolul \ 0. care termină toate literalul de șir.
caracterele [3] = "abcd"
În exemplu, numai primele trei simboluri ale inițializatorului sunt atribuite matricei de coduri. Simbolul d și caracterul zero sunt eliminate.
Dacă șirul este mai scurt decât dimensiunea specificată a matricei, elementele rămase ale matricei sunt inițializate la zero (\ 0).
Tipuri de structuri, combinații și transferuri
C de programare
care este anunțat. Numele unei structuri, combinație sau enumerare este o etichetă.
typedef
Numerele pentru tipurile de bază, enumerare, structură și combinare sunt specifici pentru fiecare dintre ele. Numele tipurilor de pointer, matrice și funcție sunt date în următoarea formă sintactică:
C de programare
Rezumat declarativ
Expresii și atribuții
În C, valorile expresiilor sunt atribuite. În plus față de o simplă atribuire prin operație =. C acceptă operațiile de asignare a compușilor care execută operații suplimentare pe operanții lor înainte de alocare. Valoarea finală a rezultatului depinde de prioritatea operațiilor și de efectele secundare, dacă apar. Ordinea de calcul este stabilită de o anumită grupare a operanzilor și a operațiilor din expresie. Un efect secundar este o schimbare a stării mașinii cauzată de procesul de evaluare a expresiei.
Într-o expresie cu efect secundar, calculul unui operand poate depinde de valoarea celuilalt. Pentru aceleași operații, rezultatul expresiei depinde și de ordinea în care sunt evaluați operanzii.
Valoarea reprezentată de fiecare operand din expresie are un tip care poate fi convertit la alte tipuri într-un context specific. Se înregistrează transformări de tipuri