Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:laboratoare:resurse:c_tips [2015/03/02 21:31]
adrian.stanciu [Când un array este un pointer]
so:laboratoare:resurse:c_tips [2016/06/05 17:51] (current)
adrian.stanciu [Folosirea specificatorului static pentru variabile globale și funcții]
Line 56: Line 56:
   * poate conține definiții de funcții inline ce trebuiesc partajate   * poate conține definiții de funcții inline ce trebuiesc partajate
   * **NU** conține cod executabil cu excepția funcțiilor inline și a macro-urilor   * **NU** conține cod executabil cu excepția funcțiilor inline și a macro-urilor
 +
 ==== Alocare și eliberare de resurse ==== ==== Alocare și eliberare de resurse ====
  
 O practică bună este ca atunci când scriem o instrucțiune ce alocă o resursă (alocare dinamică de memorie, deschidere a unui fișier) să scriem și instrucțiunea asociată care eliberează acea resursă atunci când nu mai este necesară. În acest fel ne asigurăm că nu ținem ocupate resursele sistemului mai mult decât este cazul. O practică bună este ca atunci când scriem o instrucțiune ce alocă o resursă (alocare dinamică de memorie, deschidere a unui fișier) să scriem și instrucțiunea asociată care eliberează acea resursă atunci când nu mai este necesară. În acest fel ne asigurăm că nu ținem ocupate resursele sistemului mai mult decât este cazul.
 +
 +==== Folosirea de tool-uri pentru verificarea coding style-ului ====
 +
 +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 Perl folosit în kernelul Linux pentru a verifica coding style-ului patch-urilor ce urmează a fi submise.
  
 ===== Limbaj ===== ===== Limbaj =====
Line 443: 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 =====
Line 481: Line 495:
   *[[http://​www.gnu.org/​software/​libc/​manual/​ | Documentația GNU C Library]]   *[[http://​www.gnu.org/​software/​libc/​manual/​ | Documentația GNU C Library]]
   *[[http://​linux.die.net/​man/​1/​indent | Tool pentru indentare]]   *[[http://​linux.die.net/​man/​1/​indent | Tool pentru indentare]]
- 
-~~DISCUSSION:​off~~ 
so/laboratoare/resurse/c_tips.1425324688.txt.gz · Last modified: 2015/03/02 21:31 by adrian.stanciu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0