Differences

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

Link to this comparison view

programare:tmp-acs-bd:tutoriale:good_practices [2022/01/21 01:12]
darius.neatu created
programare:tmp-acs-bd:tutoriale:good_practices [2022/01/21 01:29] (current)
radu.nichita
Line 17: Line 17:
 ===== Cuprins ===== ===== Cuprins =====
  
-  * [[#good-practices|Good practices]] +  * [[#de_ce_cod_organizat|De ce cod organizat?​]] 
-    * [[#​cuprins|Cuprins]] +  * [[#organizare_surse|Organizare surse]] 
-    * [[#​de-ce-cod-organizat|De ce cod organizat?​]] +    * [[#​exemplu|Exemplu]] 
-    * [[#organizare-surse|Organizare surse]] +  * [[#coding_style|Coding-Style]] 
-      * [[#​exemplu|Exemplu]] +  * [[#modularizare_cod|Modularizare cod]] 
-    * [[#coding-style|Coding-Style]] +    * [[#de_ce|De ce?]] 
-    * [[#modularizare-cod|Modularizare cod]] +    * [[#​cum|Cum?​]] 
-      * [[#de-ce|De ce?]] +    * [[#​faq|FAQ]] 
-      * [[#​cum|Cum?​]] +    * [[#când_fac_funcții|Când fac funcții?​]] 
-      * [[#​faq|FAQ]] +    * [[#​cum-aleg-numele-de-funcții|Cum aleg numele de funcții?​]] 
-      * [[#când-fac-funcții|Când fac funcții?​]] +    * [[#câti-parametrii_ar_trebui_să_aibă_o_funcție|Câti parametrii ar trebui să aibă o funcție?​]] 
-      * [[#​cum-aleg-numele-de-funcții|Cum aleg numele de funcții?​]] +    * [[#când_ar_trebui_să_am_un_parametru_declarat_const_într_o_funcție|Când ar trebui să am un parametru declarat ''​%%const%%''​ într-o funcție?​]] 
-      * [[#câti-parametrii-ar-trebui-să-aibă-o-funcție|Câti parametrii ar trebui să aibă o funcție?​]] +    * [[#când_este_bine_să_trimit_variabile_parametrii_la_o_funcție_și_când_nu|Când este bine să trimit variabile parametrii la o funcție și când nu?]] 
-      * [[#când-ar-trebui-să-am-un-parametru-declarat-const-într-o-funcție|Când ar trebui să am un parametru declarat ''​%%const%%''​ într-o funcție?​]] +  * [[#tips__tricks|Tips & tricks]] 
-      * [[#când-este-bine-să-trimit-variabile-parametrii-la-o-funcție-și-când-nu|Când este bine să trimit variabile parametrii la o funcție și când nu?]] +    * [[#programare_defensivă|Programare defensivă]] 
-    * [[#tips--tricks|Tips & tricks]] +    * [[#​genericitate|Genericitate]] 
-      * [[#programare-defensivă|Programare defensivă]] +    * [[#exemplu_de_funcție_generică|Exemplu de funcție generică]]
-      * [[#​genericitate|Genericitate]] +
-      * [[#exemplu-de-funcție-generică|Exemplu de funcție generică]]+
  
 Materialul prezent își propune să prezinte câteva din modalitățile prin care putem face codul scris să poate fi ''​%%înțeles%%''​ și ''​%%extins%%''​ de o altă persoană, precum și câteva modalități de a scrie cod ''​%%modularizat%%'',​ ce respectă un anumit stil de ''​%%coding-style%%''​. Materialul prezent își propune să prezinte câteva din modalitățile prin care putem face codul scris să poate fi ''​%%înțeles%%''​ și ''​%%extins%%''​ de o altă persoană, precum și câteva modalități de a scrie cod ''​%%modularizat%%'',​ ce respectă un anumit stil de ''​%%coding-style%%''​.
Line 80: Line 78:
 De multe ori, când lucrăm cu o funcție, dorim să cunoaștem **doar** ''​%%modul de trimitere%%''​ al parametrilor,​ nefiind necesară neapărat înțelegerea modului în care a fost scrisă funcția (de exemplu, pentru funcția ''​%%fseek%%''​ ne interesează rezultatul - că se mută cursorul în fișier, nu cum se face acest lucru în sistemul de operare). De multe ori, când lucrăm cu o funcție, dorim să cunoaștem **doar** ''​%%modul de trimitere%%''​ al parametrilor,​ nefiind necesară neapărat înțelegerea modului în care a fost scrisă funcția (de exemplu, pentru funcția ''​%%fseek%%''​ ne interesează rezultatul - că se mută cursorul în fișier, nu cum se face acest lucru în sistemul de operare).
  
-Pentru a ''​%%delimita%%''​ partea de implementarea funcției de partea de întelegere a modului de apelare, folosim ''​%%fișiere sursă%%''​ (cu extensia ''​%%.c%%''​) și ''​%%fișiere antet%%''​ (sau header - cu extensia ''​%%.h%%''​). În ''​%%fișierele header%%''​ scriem: * ''​%%semnăturile funcțiilor%%''​ * tipuri noi de date definite de programator (structuri, uniuni, enum-uri) * constante / macrouri În ''​%%fișierele sursă%%''​ scriem: * ''​%%implementările funcțiilor%%''​ din header * implementările altor funcții care sunt folosite doar în fișierul curent (și declarate de obicei cu specificatorul ''​%%static%%''​) * alte tipuri de date / constante / macrouri care sunt folosite doar în fișierul în care sunt declarate+Pentru a ''​%%delimita%%''​ partea de implementarea funcției de partea de întelegere a modului de apelare, folosim ''​%%fișiere sursă%%''​ (cu extensia ''​%%.c%%''​) și ''​%%fișiere antet%%''​ (sau header - cu extensia ''​%%.h%%''​). În ''​%%fișierele header%%''​ scriem: 
 + 
 +  ​* ''​%%semnăturile funcțiilor%%''​ 
 +  ​* tipuri noi de date definite de programator (structuri, uniuni, enum-uri) 
 +  ​* constante / macrouri 
 + 
 +În ''​%%fișierele sursă%%''​ scriem: 
 + 
 +  ​* ''​%%implementările funcțiilor%%''​ din header 
 +  ​* implementările altor funcții care sunt folosite doar în fișierul curent (și declarate de obicei cu specificatorul ''​%%static%%''​) 
 +  ​* alte tipuri de date / constante / macrouri care sunt folosite doar în fișierul în care sunt declarate
  
 Avantajele folosirii unei organizări logice și structurate în mai multe fișiere ne permite: Avantajele folosirii unei organizări logice și structurate în mai multe fișiere ne permite:
Line 125: Line 133:
 } }
  
-// print a vector ​+// print a vector
 // e.g. "[ 10, 20, 30 ]" // e.g. "[ 10, 20, 30 ]"
-void print_vector(int n, int *v) +void print_vector(int n, int *v)
 { {
     printf("​[ ");     printf("​[ ");
Line 136: Line 144:
 } }
  
-int main(void) ​+int main(void)
 { {
     int v[] = {2, 3, 5, 10};     int v[] = {2, 3, 5, 10};
Line 182: Line 190:
 } }
  
-void sort_vector(int n, int* v) +void sort_vector(int n, int* v)
 { {
     for (int i = 0; i < n - 1; ++i) {     for (int i = 0; i < n - 1; ++i) {
Line 195: Line 203:
 } }
  
-void print_vector(int n, int *v) +void print_vector(int n, int *v)
 { {
     printf("​[ ");     printf("​[ ");
Line 222: Line 230:
 #include "​vector.h"​ #include "​vector.h"​
  
-int main(void) ​+int main(void)
 { {
  
Line 312: Line 320:
 #include <​stdlib.h>​ #include <​stdlib.h>​
  
-int main(void) ​+int main(void)
 { {
     int n, *v;     int n, *v;
Line 342: Line 350:
 #define FILE_INNACESIBLE_FILE 2 #define FILE_INNACESIBLE_FILE 2
  
-int write_vector_file(int n, int *v, char* file_name) ​+int write_vector_file(int n, int *v, char* file_name)
 { {
     if (file_name == NULL) {     if (file_name == NULL) {
Line 364: Line 372:
 } }
  
-int main(void) ​+int main(void)
 { {
     int v[] = {1, 2, 3, 4};     int v[] = {1, 2, 3, 4};
Line 396: Line 404:
 #include <​stdlib.h>​ #include <​stdlib.h>​
  
-int** alloc_matrix(int n, int m) +int** alloc_matrix(int n, int m)
 { {
-    ​+
     int **mat = malloc(n * sizeof(int *));     int **mat = malloc(n * sizeof(int *));
     if (!mat) {     if (!mat) {
Line 418: Line 426:
 } }
  
-void free_matrix(int n, int m, int** mat) +void free_matrix(int n, int m, int** mat)
 { {
     for (int i = 0; i < n; ++i) {     for (int i = 0; i < n; ++i) {
Line 426: Line 434:
 } }
  
-int main(void) ​+int main(void)
 { {
     int n, m;     int n, m;
Line 474: Line 482:
 // generic_sort.c // generic_sort.c
  
-void sort_vector(int n, void *v, int elem_size, int (*compare_function)(void *, void *)) +void sort_vector(int n, void *v, int elem_size, int (*compare_function)(void *, void *))
 { {
  
Line 480: Line 488:
     if (!tmp) {     if (!tmp) {
         return;         return;
-    } +    }
  
     for (int i = 0; i < n - 1; ++i) {     for (int i = 0; i < n - 1; ++i) {
         for (int j = i + 1; j < n; j++) {         for (int j = i + 1; j < n; j++) {
             void *vi = (char *)v + i * elem_size; // address of the i-th element from vector <=> &v[i]             void *vi = (char *)v + i * elem_size; // address of the i-th element from vector <=> &v[i]
-            void *vj = (char *)v + j * elem_size; // address of the j-th element from vector <=> &​v[j] ​+            void *vj = (char *)v + j * elem_size; // address of the j-th element from vector <=> &v[j]
             if (compare_function(vi,​ vj) > 0) {             if (compare_function(vi,​ vj) > 0) {
                 memcpy(tmp, vj, elem_size); // tmp = v[j];                 memcpy(tmp, vj, elem_size); // tmp = v[j];
Line 537: Line 545:
 } }
  
-int main(void) ​+int main(void)
 { {
     int v[] = {2, 10, -3, 7};     int v[] = {2, 10, -3, 7};
programare/tmp-acs-bd/tutoriale/good_practices.1642720372.txt.gz · Last modified: 2022/01/21 01:12 by darius.neatu
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