proiectanti Storage class

Standard C suportă patru stocare clasă specifier:

Standarde S89 și C99 sintaxa de conveniență susțin că typedef - o memorie de clasă de calificare. Cu toate acestea, typedef nu este un specificator propriu-zis. Mai multe privit typedef carte pe.






specificator extern

Înainte de a trece să ia în considerare specificator extern. Acesta trebuie să se ocupe pentru scurt timp cu programul de aspect. În C, la editarea unei legături variabile poate fi utilizată una dintre cele trei legări: interne, externe, sau care nu aparțin la oricare dintre aceste tipuri. (În ultimul caz nu se aplică editați link-uri către acesta.) În general, denumirile funcțiilor și variabilelor globale utilizate legătură externă. Acest lucru înseamnă că, după aspectul ei vor fi disponibile în toate fișierele care alcătuiesc programul. Obiectele declarate cu specificatorul static, vizibil la nivelul de fișier, care leagă intern este aplicat după aspectul, acestea vor fi disponibile în dosarul în care acestea sunt declarate numai. Pentru legarea nu se aplică și, prin urmare, o variabilă locală, acestea sunt disponibile numai în interiorul unităților lor.

Aici este un exemplu de utilizare specificator extern. Rețineți că variabilele globale prima și ultima declarat după main ().

Specificator joacă un rol extern important în programele care constau din mai multe fișiere. Programul de limbaj C pot fi înregistrate în mai multe fișiere care sunt compilate separat și apoi asamblate într-o singură unitate. În acest caz, trebuie să-i spuneți cumva toate fișierele ale variabilelor globale ale programului. Cel mai bun (și cel mai portabil) mod de a face acest lucru - pentru a defini (descrie) toate variabilele globale într-un singur fișier și să le declare în alte Specificator extern fișiere, așa cum este prezentat în Fig. 2.1.

Fig. 2.1. Utilizarea variabilelor globale în modulele compilate separat

În al doilea fișier extern Specificator spune compilatorului că aceste variabile sunt definite în alte fișiere. Astfel, compilatorul cunoaște numele și tipurile de variabile plasate în altă parte, și poate compila separat al doilea fișier, fără să știe nimic despre primul. Când legătura între aceste două module, toate referirile la variabile globale sunt rezolvate.

specificator statică

Variabilele declarate cu specificatorul static. stocate permanent în funcție sau dosarul său. Spre deosebire de variabilele globale sunt invizibile în afara funcției sau un fișier lor, dar ele își păstrează valoarea între apeluri. Această caracteristică le face utile în funcții generale și bibliotecă pentru a fi utilizate de către alți programatori. Specificator statice afectează variabile locale și globale în moduri diferite.

Variabilele statice locale

Pentru Specificator variabilă locală descrisă cu statică. compilatorul alocă memorie pentru utilizarea permanentă a terenurilor în același mod ca și pentru variabilele globale. Diferența fundamentală dintre statică locală de la variabile globale este faptul că variabilele locale statice sunt vizibile numai în blocul în care sunt declarate. În variabile locale scurte, statice - sunt variabile locale își păstrează valoarea între apelurile la funcția.






În acest exemplu, series_num variabila persistă între apeluri de funcții, în timp ce variabila locală normală este creată la fiecare apel, și apoi distruse. Prin urmare, în acest exemplu, fiecare serie apel () generează un nou număr dependent de cel precedent, este posibil să se renunțe cu respectivele variabile globale.

variabilă locală statică poate fi inițializat. Această valoare este atribuită ea doar o singură dată - la începutul programului, dar nu de fiecare dată când programați blocul ca variabila locala de obicei. În următoarea versiune a seriei funcției () variabila locală statică este inițializată cu numărul 100:

Variabilele statice globale

Următorul exemplu ilustrează aplicarea unei variabile globale statice. Aici, generator de numere de secvență modificat, astfel încât numărul inițial dat de apel o altă funcție, series_start ():

Call series_start () cu unele număr întreg ca un generator de parametru inițializează serie (). După aceea, secvența de numere pot fi generate de serii multiple de apel ().

Prezentare generală. Numele variabilelor locale statice sunt vizibile numai în cadrul blocului în care acestea sunt declarate; nume de variabile statice globale sunt vizibile numai în dosarul în care sunt declarate.

Dacă puneți seria funcția () și series_num () într-o bibliotecă, acesta va fi deja imposibil să se facă referire la series_num variabilă. a fost ascunsă de toți operatorii pe tot restul programului. În același timp, în program (desigur, în alte fișiere), puteți declara și de a folosi o altă variabilă numită series_num. Cu alte cuvinte, specificatorul pentru a crea o statice numai funcții vizibile variabile în care este necesar, eliminarea efectelor secundare nedorite.

Astfel, dezvoltarea de programe mari, complexe pentru „ascund“ variabile pot fi utilizate specificator statice.

registru specificator

Inițial registru de stocare în specificatorul se aplică doar variabile de tip int. char, și indicii. Cu toate acestea, standardul cu utilizarea extinderea registrului de calificare. acum poate fi aplicată oricărui tip de variabilă.

Primele versiuni de compilatoare C înregistrare Specificator spune compilatorului că variabila ar trebui să fie stocate într-un registru, nu în memorie, toate celelalte variabile. Aceasta conduce la faptul că operațiunile registrului variabilă este mult mai rapid decât cu variabila convenționale, deoarece această variabilă este deja în procesor și nu trebuie să-și petreacă timpul cu privire la selectarea valorii sale din memorie (și scriere de memorie).

Registrul Specificatorul de identificare a extins în mod semnificativ. standarde S89 și C99 pur și simplu să declare „accesul la obiect cât mai repede posibil.“ Aproape aceleași variabile de caractere și întregi sunt încă plasate în registre ale procesorului. Desigur, obiectele mari (cum ar fi matrice) nu pot fi plasate în registrele de procesor, dar compilatorul este instruit să „aibă grijă“ cu privire la viteza operațiunilor cu ei. În funcție de punerea în aplicare specifică a variabilelor compilatorului și înregistra sistemul de operare sunt tratate în mod diferit. Uneori înregistra Specificator este pur și simplu ignorat și variabila este tratată ca de obicei, dar, în practică, acest lucru este rar.

Numărul maxim de variabile de registru. Optimizarea pentru viteza depinde de mediul de programare și punere în aplicare specifice compilator. În cazul în care aceste variabile ar fi prea mult, compilatorul transformă automat variabilele de registru în neînregistrate. Acest lucru asigură portabilitatea programelor într-o gamă largă de procesoare.

De obicei, în registrele de procesor pot fi plasate cel puțin două variabile de tip char sau int. Cu toate acestea, în diferite medii de programare moduri de optimizare pot fi foarte diferite, astfel încât selectarea modului de optimizare ar trebui să fie puse în aplicare luând în considerare caracteristicile unui anumit compilator.


[1] Sinonime: determinare. definiție.