Differences

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

Link to this comparison view

programare:tutoriale:good_practices [2022/01/24 16:25]
stefan.popa99 [Modularizare cod]
programare:tutoriale:good_practices [2022/01/24 16:28] (current)
stefan.popa99 [Tips & tricks]
Line 304: Line 304:
 ar fi necesară copierea a 30 de bytes dacă se dorește pasarea unei structuri ''​%%student_t%%''​ ca parametru. O modalitate de a evita copierea, este pasarea unui pointer la această structură. (sizeof(''​%%student_t *%%''​) = 4). ar fi necesară copierea a 30 de bytes dacă se dorește pasarea unei structuri ''​%%student_t%%''​ ca parametru. O modalitate de a evita copierea, este pasarea unui pointer la această structură. (sizeof(''​%%student_t *%%''​) = 4).
  
-Așadar, pentru structurile în limbajul ''​%%C%%''​se recomandă pasarea lor ca pointer.+Așadar, pentru structurile în limbajul ''​%%C%%''​ se recomandă pasarea lor ca pointer.
  
 ==== Tips & tricks ==== ==== Tips & tricks ====
Line 353: Line 353:
 { {
     if (file_name == NULL) {     if (file_name == NULL) {
-        return ​FILE_SUCCESS;+        return ​FILE_NULL_FILENAME;
     }     }
  
Line 474: Line 474:
   * un mecanism de interschimbare a două valori de orice tip;   * un mecanism de interschimbare a două valori de orice tip;
  
-Pentru a interschimba două valori de orice tip, ar trebui să ne gândim ce înseamnă a interschimba un element ''​%%v[i]%%''​ cu un alt element ''​%%v[j]%%''?​ Cum v este de tipul ''​%%void*%%'',​ nu este permis să folosim ''​%%v[i]%%'',​deoarece printr-un pointer ''​%%void*%%''​ nu știm ce elemente avem. Însă, cunoaștem dimensiunea unui ''​%%singur%%''​ element din vector - ''​%%elem_size%%'',​ putem determina adresa de început al celui de-al i-lea element din vector, care va fi la ''​%%v + i * elem_size%%''​ . Pentru a interschimba valorile, vom copia cu funcția ''​%%memcpy%%''​ un număr de''​%%elem_size%%''​ bytes de la adresa determinată pentru elementul ''​%%i%%''​ într-un buffer temporar (similar cu ''​%%temp = v[i];​%%''​),​ apoi copiem de la adresa corespunzătoare lui ''​%%j%%''​ la cea a lui ''​%%i%%''​ (similar cu ''​%%v[i] = v[j];​%%'',​ apoi din bufferul temporar la adresa corespunzătoare lui j (similar cu ''​%%v[j] = tmp;​%%''​).+Pentru a interschimba două valori de orice tip, ar trebui să ne gândim ce înseamnă a interschimba un element ''​%%v[i]%%''​ cu un alt element ''​%%v[j]%%''?​ Cum v este de tipul ''​%%void*%%'',​ nu este permis să folosim ''​%%v[i]%%'',​deoarece printr-un pointer ''​%%void*%%''​ nu știm ce elemente avem. Însă, cunoaștem dimensiunea unui ''​%%singur%%''​ element din vector - ''​%%elem_size%%'',​ putem determina adresa de început al celui de-al i-lea element din vector, care va fi la ''​%%v + i * elem_size%%''​ . Pentru a interschimba valorile, vom copia cu funcția ''​%%memcpy%%''​ un număr de ''​%%elem_size%%''​ bytes de la adresa determinată pentru elementul ''​%%i%%''​ într-un buffer temporar (similar cu ''​%%temp = v[i];​%%''​),​ apoi copiem de la adresa corespunzătoare lui ''​%%j%%''​ la cea a lui ''​%%i%%''​ (similar cu ''​%%v[i] = v[j];​%%'',​ apoi din bufferul temporar la adresa corespunzătoare lui j (similar cu ''​%%v[j] = tmp;​%%''​).
  
 O posibilă implementare a funcției este următoarea:​ O posibilă implementare a funcției este următoarea:​
programare/tutoriale/good_practices.1643034326.txt.gz · Last modified: 2022/01/24 16:25 by stefan.popa99
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