This shows you the differences between two versions of the page.
so:laboratoare:resurse:c_tips [2015/03/04 23:39] razvan.crainea [Link-uri utile] |
so:laboratoare:resurse:c_tips [2016/06/05 17:51] (current) adrian.stanciu [Folosirea specificatorului static pentru variabile globale și funcții] |
||
---|---|---|---|
Line 64: | Line 64: | ||
Un coding style bun, folosit consecvent, face mai ușoară și mai rapidă înțelegerea unui cod. Marile proiecte software îsi stabilesc un coding style și realizează utilitare pentru verificarea automată a acestuia. | Un coding style bun, folosit consecvent, face mai ușoară și mai rapidă înțelegerea unui cod. Marile proiecte software îsi stabilesc un coding style și realizează utilitare pentru verificarea automată a acestuia. | ||
- | [[https://github.com/torvalds/linux/blob/master/scripts/checkpatch.pl | Checkpatch.pl]] este un script Pearl folosit în kernelul Linux pentru a verifica coding style-ului patch-urilor ce urmează a fi submise. | + | [[https://github.com/torvalds/linux/blob/master/scripts/checkpatch.pl | Checkpatch.pl]] este un script Perl folosit în kernelul Linux pentru a verifica coding style-ului patch-urilor ce urmează a fi submise. |
===== Limbaj ===== | ===== Limbaj ===== | ||
Line 449: | Line 449: | ||
int m = *(a + i); | int m = *(a + i); | ||
</code> | </code> | ||
+ | |||
+ | ==== Folosirea specificatorului "static" pentru variabile globale și funcții ==== | ||
+ | |||
+ | O variabilă globală sau o funcție declarată cu specificatorul "static" are internal [[http://en.cppreference.com/w/c/language/storage_duration | linkage]], adică poate fi referită doar din translation unit-ul respectiv (un translation unit reprezintă un fișier sursă .c împreună cu toate fișierele header pe care acesta le include). | ||
+ | |||
+ | Avantajele acestei practici sunt: | ||
+ | * simbolurile sunt vizibile doar în translation unit-ul respectiv; astfel, se evită poluarea namespace-ului global și se reduc șansele conflictelor de nume | ||
+ | * încapsulare: exte expusă doar interfața publică a modulului (nu și obiectele și funcțiile interne ce contribuie la implementarea interfeței) | ||
===== Utilizare API ===== | ===== Utilizare API ===== |