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:20]
stefan.popa99 [Modularizare cod]
programare:tutoriale:good_practices [2025/11/04 15:37] (current)
cpatrascu1910 [Good practices]
Line 1: Line 1:
 ====== Good practices ====== ====== Good practices ======
  
- +{{:pa:new_pa:partners:bitdefender_masterbrand_logo_positive.png?190 |}}  
-<​note>​ +Bitdefender este un lider recunoscut în domeniul securității IT, care oferă soluții superioare de prevenție, detecție și răspuns la incidente de securitate cibernetică. Milioane de sisteme folosite de oameni, companii și instituții guvernamentale sunt protejate de soluțiile companiei, ceea ce face Bitdefender ​unul dintre cei mai de încredere ​experți ​în combaterea amenințărilor informatice,​ în protejarea intimității și datelor, a identității digitale ​și în consolidarea rezilienței la atacuri. Compania a inovat constant în domenii precum antimalware,​ Internetul Lucrurilor, analiză comportamentală și inteligență artificială,​ iar tehnologiile Bitdefender sunt licențiate către peste 180 dintre cele mai cunoscute branduri de securitate din lume.
-{{:programare:partners:logo:​logo-bitdefender.png?200 |}} +
-Bitdefender este un lider recunoscut în domeniul securității IT, care oferă soluții superioare de prevenție, detecție și răspuns la incidente de securitate cibernetică. Milioane de sisteme folosite de oameni, companii și instituții guvernamentale sunt protejate de soluțiile companiei, ceea ce face Bitdefender ​cel mai de încredere ​expert ​în combaterea amenințărilor informatice,​ în protejarea intimității și datelor și în consolidarea rezilienței la atacuri. Ca urmare a investițiilor susținute în cercetare și dezvoltare, laboratoarele Bitdefender descoperă 400 de noi amenințări informatice în fiecare minut și validează zilnic 30 de miliarde de interogări privind amenințările. Compania a inovat constant în domenii precum antimalware,​ Internetul Lucrurilor, analiză comportamentală și inteligență artificială,​ iar tehnologiile Bitdefender sunt licențiate către peste 150 dintre cele mai cunoscute branduri de securitate din lume. Fondată în 2001, compania Bitdefender are clienți în 170 de țări și birouri pe toate continentele. Mai multe detalii sunt disponibile pe www.bitdefender.ro. +
-</​note>​+
  
 **Resposabili**:​ **Resposabili**:​
Line 262: Line 259:
 === De ce? === === De ce? ===
  
-Dacă tot codul pentru o aplicație ar fi scris într-o singură funcție, el ar fi foarte de greu de extins în cazul în care s-ar implementa o funcționalitate nouă. Majoritatea aplicațiilor importante au câteva sute de mii de linii de cod, iar urmărirea modificări unei variabile de-a lungul programului ar presupune o perioadă lungă de timp.+Dacă tot codul pentru o aplicație ar fi scris într-o singură funcție, el ar fi foarte de greu de extins în cazul în care s-ar implementa o funcționalitate nouă. Majoritatea aplicațiilor importante au câteva sute de mii de linii de cod, iar urmărirea modificării unei variabile de-a lungul programului ar presupune o perioadă lungă de timp.
  
 === Cum? === === Cum? ===
Line 284: Line 281:
 == 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? ==
  
-Este de preferat ca toți parametri care sunt nu sunt constanți într-o funcție să fie marcați ca și ''​%%const%%''​. Astfel, la încercarea eronată de modificare a acestora, se va genera o eroare de compilare.+Este de preferat ca toți parametri care nu sunt modificați într-o funcție să fie marcați ca și ''​%%const%%''​. Astfel, la încercarea eronată de modificare a acestora, se va genera o eroare de compilare.
  
 == Când este bine să trimit variabile parametri la o funcție și când nu? == == Când este bine să trimit variabile parametri la o funcție și când nu? ==
Line 304: Line 301:
 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 350:
 { {
     if (file_name == NULL) {     if (file_name == NULL) {
-        return ​FILE_SUCCESS;+        return ​FILE_NULL_FILENAME;
     }     }
  
Line 474: Line 471:
   * 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.1643034001.txt.gz · Last modified: 2022/01/24 16:20 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