1.. include:: ../disclaimer-ita.rst 2 3:Original: :ref:`Documentation/process/coding-style.rst <codingstyle>` 4:Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5 6.. _it_codingstyle: 7 8Stile del codice per il kernel Linux 9==================================== 10 11Questo è un breve documento che descrive lo stile di codice preferito per 12il kernel Linux. Lo stile di codifica è molto personale e non voglio 13**forzare** nessuno ad accettare il mio, ma questo stile è quello che 14dev'essere usato per qualsiasi cosa che io sia in grado di mantenere, e l'ho 15preferito anche per molte altre cose. Per favore, almeno tenete in 16considerazione le osservazioni espresse qui. 17 18La prima cosa che suggerisco è quella di stamparsi una copia degli standard 19di codifica GNU e di NON leggerla. Bruciatela, è un grande gesto simbolico. 20 21Comunque, ecco i punti: 22 231) Indentazione 24--------------- 25 26La tabulazione (tab) è di 8 caratteri e così anche le indentazioni. Ci sono 27alcuni movimenti di eretici che vorrebbero l'indentazione a 4 (o perfino 2!) 28caratteri di profondità, che è simile al tentativo di definire il valore del 29pi-greco a 3. 30 31Motivazione: l'idea dell'indentazione è di definire chiaramente dove un blocco 32di controllo inizia e finisce. Specialmente quando siete rimasti a guardare lo 33schermo per 20 ore a file, troverete molto più facile capire i livelli di 34indentazione se questi sono larghi. 35 36Ora, alcuni rivendicano che un'indentazione da 8 caratteri sposta il codice 37troppo a destra e che quindi rende difficile la lettura su schermi a 80 38caratteri. La risposta a questa affermazione è che se vi servono più di 3 39livelli di indentazione, siete comunque fregati e dovreste correggere il vostro 40programma. 41 42In breve, l'indentazione ad 8 caratteri rende più facile la lettura, e in 43aggiunta vi avvisa quando state annidando troppo le vostre funzioni. 44Tenete ben a mente questo avviso. 45 46Al fine di facilitare l'indentazione del costrutto switch, si preferisce 47allineare sulla stessa colonna la parola chiave ``switch`` e i suoi 48subordinati ``case``. In questo modo si evita una doppia indentazione per 49i ``case``. Un esempio.: 50 51.. code-block:: c 52 53 switch (suffix) { 54 case 'G': 55 case 'g': 56 mem <<= 30; 57 break; 58 case 'M': 59 case 'm': 60 mem <<= 20; 61 break; 62 case 'K': 63 case 'k': 64 mem <<= 10; 65 /* fall through */ 66 default: 67 break; 68 } 69 70A meno che non vogliate nascondere qualcosa, non mettete più istruzioni sulla 71stessa riga: 72 73.. code-block:: c 74 75 if (condition) do_this; 76 do_something_everytime; 77 78né mettete più assegnamenti sulla stessa riga. Lo stile del kernel 79è ultrasemplice. Evitate espressioni intricate. 80 81Al di fuori dei commenti, della documentazione ed escludendo i Kconfig, gli 82spazi non vengono mai usati per l'indentazione, e l'esempio qui sopra è 83volutamente errato. 84 85Procuratevi un buon editor di testo e non lasciate spazi bianchi alla fine 86delle righe. 87 88 892) Spezzare righe lunghe e stringhe 90----------------------------------- 91 92Lo stile del codice riguarda la leggibilità e la manutenibilità utilizzando 93strumenti comuni. 94 95Il limite delle righe è di 80 colonne e questo e un limite fortemente 96desiderato. 97 98Espressioni più lunghe di 80 colonne saranno spezzettate in pezzi più piccoli, 99a meno che eccedere le 80 colonne non aiuti ad aumentare la leggibilità senza 100nascondere informazioni. I pezzi derivati sono sostanzialmente più corti degli 101originali e vengono posizionati più a destra. Lo stesso si applica, nei file 102d'intestazione, alle funzioni con una lista di argomenti molto lunga. Tuttavia, 103non spezzettate mai le stringhe visibili agli utenti come i messaggi di 104printk, questo perché inibireste la possibilità d'utilizzare grep per cercarle. 105 1063) Posizionamento di parentesi graffe e spazi 107--------------------------------------------- 108 109Un altro problema che s'affronta sempre quando si parla di stile in C è 110il posizionamento delle parentesi graffe. Al contrario della dimensione 111dell'indentazione, non ci sono motivi tecnici sulla base dei quali scegliere 112una strategia di posizionamento o un'altra; ma il modo qui preferito, 113come mostratoci dai profeti Kernighan e Ritchie, è quello di 114posizionare la parentesi graffa di apertura per ultima sulla riga, e quella 115di chiusura per prima su una nuova riga, così: 116 117.. code-block:: c 118 119 if (x is true) { 120 we do y 121 } 122 123Questo è valido per tutte le espressioni che non siano funzioni (if, switch, 124for, while, do). Per esempio: 125 126.. code-block:: c 127 128 switch (action) { 129 case KOBJ_ADD: 130 return "add"; 131 case KOBJ_REMOVE: 132 return "remove"; 133 case KOBJ_CHANGE: 134 return "change"; 135 default: 136 return NULL; 137 } 138 139Tuttavia, c'è il caso speciale, le funzioni: queste hanno la parentesi graffa 140di apertura all'inizio della riga successiva, quindi: 141 142.. code-block:: c 143 144 int function(int x) 145 { 146 body of function 147 } 148 149Eretici da tutto il mondo affermano che questa incoerenza è ... 150insomma ... incoerente, ma tutte le persone ragionevoli sanno che (a) 151K&R hanno **ragione** e (b) K&R hanno ragione. A parte questo, le funzioni 152sono comunque speciali (non potete annidarle in C). 153 154Notate che la graffa di chiusura è da sola su una riga propria, ad 155**eccezione** di quei casi dove è seguita dalla continuazione della stessa 156espressione, in pratica ``while`` nell'espressione do-while, oppure ``else`` 157nell'espressione if-else, come questo: 158 159.. code-block:: c 160 161 do { 162 body of do-loop 163 } while (condition); 164 165e 166 167.. code-block:: c 168 169 if (x == y) { 170 .. 171 } else if (x > y) { 172 ... 173 } else { 174 .... 175 } 176 177Motivazione: K&R. 178 179Inoltre, notate che questo posizionamento delle graffe minimizza il numero 180di righe vuote senza perdere di leggibilità. In questo modo, dato che le 181righe sul vostro schermo non sono una risorsa illimitata (pensate ad uno 182terminale con 25 righe), avrete delle righe vuote da riempire con dei 183commenti. 184 185Non usate inutilmente le graffe dove una singola espressione è sufficiente. 186 187.. code-block:: c 188 189 if (condition) 190 action(); 191 192e 193 194.. code-block:: none 195 196 if (condition) 197 do_this(); 198 else 199 do_that(); 200 201Questo non vale nel caso in cui solo un ramo dell'espressione if-else 202contiene una sola espressione; in quest'ultimo caso usate le graffe per 203entrambe i rami: 204 205.. code-block:: c 206 207 if (condition) { 208 do_this(); 209 do_that(); 210 } else { 211 otherwise(); 212 } 213 214Inoltre, usate le graffe se un ciclo contiene più di una semplice istruzione: 215 216.. code-block:: c 217 218 while (condition) { 219 if (test) 220 do_something(); 221 } 222 2233.1) Spazi 224********** 225 226Lo stile del kernel Linux per quanto riguarda gli spazi, dipende 227(principalmente) dalle funzioni e dalle parole chiave. Usate una spazio dopo 228(quasi tutte) le parole chiave. L'eccezioni più evidenti sono sizeof, typeof, 229alignof, e __attribute__, il cui aspetto è molto simile a quello delle 230funzioni (e in Linux, solitamente, sono usate con le parentesi, anche se il 231linguaggio non lo richiede; come ``sizeof info`` dopo aver dichiarato 232``struct fileinfo info``). 233 234Quindi utilizzate uno spazio dopo le seguenti parole chiave:: 235 236 if, switch, case, for, do, while 237 238ma non con sizeof, typeof, alignof, o __attribute__. Ad esempio, 239 240.. code-block:: c 241 242 243 s = sizeof(struct file); 244 245Non aggiungete spazi attorno (dentro) ad un'espressione fra parentesi. Questo 246esempio è **brutto**: 247 248.. code-block:: c 249 250 251 s = sizeof( struct file ); 252 253Quando dichiarate un puntatore ad una variabile o una funzione che ritorna un 254puntatore, il posto suggerito per l'asterisco ``*`` è adiacente al nome della 255variabile o della funzione, e non adiacente al nome del tipo. Esempi: 256 257.. code-block:: c 258 259 260 char *linux_banner; 261 unsigned long long memparse(char *ptr, char **retptr); 262 char *match_strdup(substring_t *s); 263 264Usate uno spazio attorno (da ogni parte) alla maggior parte degli operatori 265binari o ternari, come i seguenti:: 266 267 = + - < > * / % | & ^ <= >= == != ? : 268 269ma non mettete spazi dopo gli operatori unari:: 270 271 & * + - ~ ! sizeof typeof alignof __attribute__ defined 272 273nessuno spazio dopo l'operatore unario suffisso di incremento o decremento:: 274 275 ++ -- 276 277nessuno spazio dopo l'operatore unario prefisso di incremento o decremento:: 278 279 ++ -- 280 281e nessuno spazio attorno agli operatori dei membri di una struttura ``.`` e 282``->``. 283 284Non lasciate spazi bianchi alla fine delle righe. Alcuni editor con 285l'indentazione ``furba`` inseriranno gli spazi bianchi all'inizio di una nuova 286riga in modo appropriato, quindi potrete scrivere la riga di codice successiva 287immediatamente. Tuttavia, alcuni di questi stessi editor non rimuovono 288questi spazi bianchi quando non scrivete nulla sulla nuova riga, ad esempio 289perché volete lasciare una riga vuota. Il risultato è che finirete per avere 290delle righe che contengono spazi bianchi in coda. 291 292Git vi avviserà delle modifiche che aggiungono questi spazi vuoti di fine riga, 293e può opzionalmente rimuoverli per conto vostro; tuttavia, se state applicando 294una serie di modifiche, questo potrebbe far fallire delle modifiche successive 295perché il contesto delle righe verrà cambiato. 296 2974) Assegnare nomi 298----------------- 299 300C è un linguaggio spartano, e così dovrebbero esserlo i vostri nomi. Al 301contrario dei programmatori Modula-2 o Pascal, i programmatori C non usano 302nomi graziosi come ThisVariableIsATemporaryCounter. Un programmatore C 303chiamerebbe questa variabile ``tmp``, che è molto più facile da scrivere e 304non è una delle più difficili da capire. 305 306TUTTAVIA, nonostante i nomi con notazione mista siano da condannare, i nomi 307descrittivi per variabili globali sono un dovere. Chiamare una funzione 308globale ``pippo`` è un insulto. 309 310Le variabili GLOBALI (da usare solo se vi servono **davvero**) devono avere 311dei nomi descrittivi, così come le funzioni globali. Se avete una funzione 312che conta gli utenti attivi, dovreste chiamarla ``count_active_users()`` o 313qualcosa di simile, **non** dovreste chiamarla ``cntusr()``. 314 315Codificare il tipo di funzione nel suo nome (quella cosa chiamata notazione 316ungherese) fa male al cervello - il compilatore conosce comunque il tipo e 317può verificarli, e inoltre confonde i programmatori. Non c'è da 318sorprendersi che MicroSoft faccia programmi bacati. 319 320Le variabili LOCALI dovrebbero avere nomi corti, e significativi. Se avete 321un qualsiasi contatore di ciclo, probabilmente sarà chiamato ``i``. 322Chiamarlo ``loop_counter`` non è produttivo, non ci sono possibilità che 323``i`` possa non essere capito. Analogamente, ``tmp`` può essere una qualsiasi 324variabile che viene usata per salvare temporaneamente un valore. 325 326Se avete paura di fare casino coi nomi delle vostre variabili locali, allora 327avete un altro problema che è chiamato sindrome dello squilibrio dell'ormone 328della crescita delle funzioni. Vedere il capitolo 6 (funzioni). 329 3305) Definizione di tipi (typedef) 331-------------------------------- 332 333Per favore non usate cose come ``vps_t``. 334Usare il typedef per strutture e puntatori è uno **sbaglio**. Quando vedete: 335 336.. code-block:: c 337 338 vps_t a; 339 340nei sorgenti, cosa significa? 341Se, invece, dicesse: 342 343.. code-block:: c 344 345 struct virtual_container *a; 346 347potreste dire cos'è effettivamente ``a``. 348 349Molte persone pensano che la definizione dei tipi ``migliori la leggibilità``. 350Non molto. Sono utili per: 351 352 (a) gli oggetti completamente opachi (dove typedef viene proprio usato allo 353 scopo di **nascondere** cosa sia davvero l'oggetto). 354 355 Esempio: ``pte_t`` eccetera sono oggetti opachi che potete usare solamente 356 con le loro funzioni accessorie. 357 358 .. note:: 359 Gli oggetti opachi e le ``funzioni accessorie`` non sono, di per se, 360 una bella cosa. Il motivo per cui abbiamo cose come pte_t eccetera è 361 che davvero non c'è alcuna informazione portabile. 362 363 (b) i tipi chiaramente interi, dove l'astrazione **aiuta** ad evitare 364 confusione sul fatto che siano ``int`` oppure ``long``. 365 366 u8/u16/u32 sono typedef perfettamente accettabili, anche se ricadono 367 nella categoria (d) piuttosto che in questa. 368 369 .. note:: 370 371 Ancora - dev'esserci una **ragione** per farlo. Se qualcosa è 372 ``unsigned long``, non c'è alcun bisogno di avere: 373 374 typedef unsigned long myfalgs_t; 375 376 ma se ci sono chiare circostanze in cui potrebbe essere ``unsigned int`` 377 e in altre configurazioni ``unsigned long``, allora certamente typedef 378 è una buona scelta. 379 380 (c) quando di rado create letteralmente dei **nuovi** tipi su cui effettuare 381 verifiche. 382 383 (d) circostanze eccezionali, in cui si definiscono nuovi tipi identici a 384 quelli definiti dallo standard C99. 385 386 Nonostante ci voglia poco tempo per abituare occhi e cervello all'uso dei 387 tipi standard come ``uint32_t``, alcune persone ne obiettano l'uso. 388 389 Perciò, i tipi specifici di Linux ``u8/u16/u32/u64`` e i loro equivalenti 390 con segno, identici ai tipi standard, sono permessi- tuttavia, non sono 391 obbligatori per il nuovo codice. 392 393 (e) i tipi sicuri nella spazio utente. 394 395 In alcune strutture dati visibili dallo spazio utente non possiamo 396 richiedere l'uso dei tipi C99 e nemmeno i vari ``u32`` descritti prima. 397 Perciò, utilizziamo __u32 e tipi simili in tutte le strutture dati 398 condivise con lo spazio utente. 399 400Magari ci sono altri casi validi, ma la regola di base dovrebbe essere di 401non usare MAI MAI un typedef a meno che non rientri in una delle regole 402descritte qui. 403 404In generale, un puntatore, o una struttura a cui si ha accesso diretto in 405modo ragionevole, non dovrebbero **mai** essere definite con un typedef. 406 4076) Funzioni 408----------- 409 410Le funzioni dovrebbero essere brevi e carine, e fare una cosa sola. Dovrebbero 411occupare uno o due schermi di testo (come tutti sappiamo, la dimensione 412di uno schermo secondo ISO/ANSI è di 80x24), e fare una cosa sola e bene. 413 414La massima lunghezza di una funziona è inversamente proporzionale alla sua 415complessità e al livello di indentazione di quella funzione. Quindi, se avete 416una funzione che è concettualmente semplice ma che è implementata come un 417lunga (ma semplice) sequenza di caso-istruzione, dove avete molte piccole cose 418per molti casi differenti, allora va bene avere funzioni più lunghe. 419 420Comunque, se avete una funzione complessa e sospettate che uno studente 421non particolarmente dotato del primo anno delle scuole superiori potrebbe 422non capire cosa faccia la funzione, allora dovreste attenervi strettamente ai 423limiti. Usate funzioni di supporto con nomi descrittivi (potete chiedere al 424compilatore di renderle inline se credete che sia necessario per le 425prestazioni, e probabilmente farà un lavoro migliore di quanto avreste potuto 426fare voi). 427 428Un'altra misura delle funzioni sono il numero di variabili locali. Non 429dovrebbero eccedere le 5-10, oppure state sbagliando qualcosa. Ripensate la 430funzione, e dividetela in pezzettini. Generalmente, un cervello umano può 431seguire facilmente circa 7 cose diverse, di più lo confonderebbe. Lo sai 432d'essere brillante, ma magari vorresti riuscire a capire cos'avevi fatto due 433settimane prima. 434 435Nei file sorgenti, separate le funzioni con una riga vuota. Se la funzione è 436esportata, la macro **EXPORT** per questa funzione deve seguire immediatamente 437la riga della parentesi graffa di chiusura. Ad esempio: 438 439.. code-block:: c 440 441 int system_is_up(void) 442 { 443 return system_state == SYSTEM_RUNNING; 444 } 445 EXPORT_SYMBOL(system_is_up); 446 447Nei prototipi di funzione, includete i nomi dei parametri e i loro tipi. 448Nonostante questo non sia richiesto dal linguaggio C, in Linux viene preferito 449perché è un modo semplice per aggiungere informazioni importanti per il 450lettore. 451 452Non usate la parola chiave ``extern`` coi prototipi di funzione perché 453rende le righe più lunghe e non è strettamente necessario. 454 4557) Centralizzare il ritorno delle funzioni 456------------------------------------------ 457 458Sebbene sia deprecata da molte persone, l'istruzione goto è impiegata di 459frequente dai compilatori sotto forma di salto incondizionato. 460 461L'istruzione goto diventa utile quando una funzione ha punti d'uscita multipli 462e vanno eseguite alcune procedure di pulizia in comune. Se non è necessario 463pulire alcunché, allora ritornate direttamente. 464 465Assegnate un nome all'etichetta di modo che suggerisca cosa fa la goto o 466perché esiste. Un esempio di un buon nome potrebbe essere ``out_free_buffer:`` 467se la goto libera (free) un ``buffer``. Evitate l'uso di nomi GW-BASIC come 468``err1:`` ed ``err2:``, potreste doverli riordinare se aggiungete o rimuovete 469punti d'uscita, e inoltre rende difficile verificarne la correttezza. 470 471I motivo per usare le goto sono: 472 473- i salti incondizionati sono più facili da capire e seguire 474- l'annidamento si riduce 475- si evita di dimenticare, per errore, di aggiornare un singolo punto d'uscita 476- aiuta il compilatore ad ottimizzare il codice ridondante ;) 477 478.. code-block:: c 479 480 int fun(int a) 481 { 482 int result = 0; 483 char *buffer; 484 485 buffer = kmalloc(SIZE, GFP_KERNEL); 486 if (!buffer) 487 return -ENOMEM; 488 489 if (condition1) { 490 while (loop1) { 491 ... 492 } 493 result = 1; 494 goto out_free_buffer; 495 } 496 ... 497 out_free_buffer: 498 kfree(buffer); 499 return result; 500 } 501 502Un baco abbastanza comune di cui bisogna prendere nota è il ``one err bugs`` 503che assomiglia a questo: 504 505.. code-block:: c 506 507 err: 508 kfree(foo->bar); 509 kfree(foo); 510 return ret; 511 512Il baco in questo codice è che in alcuni punti d'uscita la variabile ``foo`` è 513NULL. Normalmente si corregge questo baco dividendo la gestione dell'errore in 514due parti ``err_free_bar:`` e ``err_free_foo:``: 515 516.. code-block:: c 517 518 err_free_bar: 519 kfree(foo->bar); 520 err_free_foo: 521 kfree(foo); 522 return ret; 523 524Idealmente, dovreste simulare condizioni d'errore per verificare i vostri 525percorsi d'uscita. 526 527 5288) Commenti 529----------- 530 531I commenti sono una buona cosa, ma c'è anche il rischio di esagerare. MAI 532spiegare COME funziona il vostro codice in un commento: è molto meglio 533scrivere il codice di modo che il suo funzionamento sia ovvio, inoltre 534spiegare codice scritto male è una perdita di tempo. 535 536Solitamente, i commenti devono dire COSA fa il codice, e non COME lo fa. 537Inoltre, cercate di evitare i commenti nel corpo della funzione: se la 538funzione è così complessa che dovete commentarla a pezzi, allora dovreste 539tornare al punto 6 per un momento. Potete mettere dei piccoli commenti per 540annotare o avvisare il lettore circa un qualcosa di particolarmente arguto 541(o brutto), ma cercate di non esagerare. Invece, mettete i commenti in 542testa alla funzione spiegando alle persone cosa fa, e possibilmente anche 543il PERCHÉ. 544 545Per favore, quando commentate una funzione dell'API del kernel usate il 546formato kernel-doc. Per maggiori dettagli, leggete i file in 547:ref::ref:`Documentation/translations/it_IT/doc-guide/ <it_doc_guide>` e in 548``script/kernel-doc``. 549 550Lo stile preferito per i commenti più lunghi (multi-riga) è: 551 552.. code-block:: c 553 554 /* 555 * This is the preferred style for multi-line 556 * comments in the Linux kernel source code. 557 * Please use it consistently. 558 * 559 * Description: A column of asterisks on the left side, 560 * with beginning and ending almost-blank lines. 561 */ 562 563Per i file in net/ e in drivers/net/ lo stile preferito per i commenti 564più lunghi (multi-riga) è leggermente diverso. 565 566.. code-block:: c 567 568 /* The preferred comment style for files in net/ and drivers/net 569 * looks like this. 570 * 571 * It is nearly the same as the generally preferred comment style, 572 * but there is no initial almost-blank line. 573 */ 574 575È anche importante commentare i dati, sia per i tipi base che per tipi 576derivati. A questo scopo, dichiarate un dato per riga (niente virgole 577per una dichiarazione multipla). Questo vi lascerà spazio per un piccolo 578commento per spiegarne l'uso. 579 580 5819) Avete fatto un pasticcio 582--------------------------- 583 584Va bene, li facciamo tutti. Probabilmente vi è stato detto dal vostro 585aiutante Unix di fiducia che ``GNU emacs`` formatta automaticamente il 586codice C per conto vostro, e avete notato che sì, in effetti lo fa, ma che 587i modi predefiniti non sono proprio allettanti (infatti, sono peggio che 588premere tasti a caso - un numero infinito di scimmie che scrivono in 589GNU emacs non faranno mai un buon programma). 590 591Quindi, potete sbarazzarvi di GNU emacs, o riconfigurarlo con valori più 592sensati. Per fare quest'ultima cosa, potete appiccicare il codice che 593segue nel vostro file .emacs: 594 595.. code-block:: none 596 597 (defun c-lineup-arglist-tabs-only (ignored) 598 "Line up argument lists by tabs, not spaces" 599 (let* ((anchor (c-langelem-pos c-syntactic-element)) 600 (column (c-langelem-2nd-pos c-syntactic-element)) 601 (offset (- (1+ column) anchor)) 602 (steps (floor offset c-basic-offset))) 603 (* (max steps 1) 604 c-basic-offset))) 605 606 (dir-locals-set-class-variables 607 'linux-kernel 608 '((c-mode . ( 609 (c-basic-offset . 8) 610 (c-label-minimum-indentation . 0) 611 (c-offsets-alist . ( 612 (arglist-close . c-lineup-arglist-tabs-only) 613 (arglist-cont-nonempty . 614 (c-lineup-gcc-asm-reg c-lineup-arglist-tabs-only)) 615 (arglist-intro . +) 616 (brace-list-intro . +) 617 (c . c-lineup-C-comments) 618 (case-label . 0) 619 (comment-intro . c-lineup-comment) 620 (cpp-define-intro . +) 621 (cpp-macro . -1000) 622 (cpp-macro-cont . +) 623 (defun-block-intro . +) 624 (else-clause . 0) 625 (func-decl-cont . +) 626 (inclass . +) 627 (inher-cont . c-lineup-multi-inher) 628 (knr-argdecl-intro . 0) 629 (label . -1000) 630 (statement . 0) 631 (statement-block-intro . +) 632 (statement-case-intro . +) 633 (statement-cont . +) 634 (substatement . +) 635 )) 636 (indent-tabs-mode . t) 637 (show-trailing-whitespace . t) 638 )))) 639 640 (dir-locals-set-directory-class 641 (expand-file-name "~/src/linux-trees") 642 'linux-kernel) 643 644Questo farà funzionare meglio emacs con lo stile del kernel per i file che 645si trovano nella cartella ``~/src/linux-trees``. 646 647Ma anche se doveste fallire nell'ottenere una formattazione sensata in emacs 648non tutto è perduto: usate ``indent``. 649 650Ora, ancora, GNU indent ha la stessa configurazione decerebrata di GNU emacs, 651ed è per questo che dovete passargli alcune opzioni da riga di comando. 652Tuttavia, non è così terribile, perché perfino i creatori di GNU indent 653riconoscono l'autorità di K&R (le persone del progetto GNU non sono cattive, 654sono solo mal indirizzate sull'argomento), quindi date ad indent le opzioni 655``-kr -i8`` (che significa ``K&R, 8 caratteri di indentazione``), o utilizzate 656``scripts/Lindent`` che indenterà usando l'ultimo stile. 657 658``indent`` ha un sacco di opzioni, e specialmente quando si tratta di 659riformattare i commenti dovreste dare un'occhiata alle pagine man. 660Ma ricordatevi: ``indent`` non è un correttore per una cattiva programmazione. 661 662Da notare che potete utilizzare anche ``clang-format`` per aiutarvi con queste 663regole, per riformattare rapidamente ad automaticamente alcune parti del 664vostro codice, e per revisionare interi file al fine di identificare errori 665di stile, refusi e possibilmente anche delle migliorie. È anche utile per 666ordinare gli ``#include``, per allineare variabili/macro, per ridistribuire 667il testo e altre cose simili. 668Per maggiori dettagli, consultate il file 669:ref:`Documentation/translations/it_IT/process/clang-format.rst <it_clangformat>`. 670 671 67210) File di configurazione Kconfig 673---------------------------------- 674 675Per tutti i file di configurazione Kconfig* che si possono trovare nei 676sorgenti, l'indentazione è un po' differente. Le linee dopo un ``config`` 677sono indentate con un tab, mentre il testo descrittivo è indentato di 678ulteriori due spazi. Esempio:: 679 680 config AUDIT 681 bool "Auditing support" 682 depends on NET 683 help 684 Enable auditing infrastructure that can be used with another 685 kernel subsystem, such as SELinux (which requires this for 686 logging of avc messages output). Does not do system-call 687 auditing without CONFIG_AUDITSYSCALL. 688 689Le funzionalità davvero pericolose (per esempio il supporto alla scrittura 690per certi filesystem) dovrebbero essere dichiarate chiaramente come tali 691nella stringa di titolo:: 692 693 config ADFS_FS_RW 694 bool "ADFS write support (DANGEROUS)" 695 depends on ADFS_FS 696 ... 697 698Per la documentazione completa sui file di configurazione, consultate 699il documento Documentation/translations/it_IT/kbuild/kconfig-language.txt 700 701 70211) Strutture dati 703------------------ 704 705Le strutture dati che hanno una visibilità superiore al contesto del 706singolo thread in cui vengono create e distrutte, dovrebbero sempre 707avere un contatore di riferimenti. Nel kernel non esiste un 708*garbage collector* (e fuori dal kernel i *garbage collector* sono lenti 709e inefficienti), questo significa che **dovete** assolutamente avere un 710contatore di riferimenti per ogni cosa che usate. 711 712Avere un contatore di riferimenti significa che potete evitare la 713sincronizzazione e permette a più utenti di accedere alla struttura dati 714in parallelo - e non doversi preoccupare di una struttura dati che 715improvvisamente sparisce dalla loro vista perché il loro processo dormiva 716o stava facendo altro per un attimo. 717 718Da notare che la sincronizzazione **non** si sostituisce al conteggio dei 719riferimenti. La sincronizzazione ha lo scopo di mantenere le strutture 720dati coerenti, mentre il conteggio dei riferimenti è una tecnica di gestione 721della memoria. Solitamente servono entrambe le cose, e non vanno confuse fra 722di loro. 723 724Quando si hanno diverse classi di utenti, le strutture dati possono avere 725due livelli di contatori di riferimenti. Il contatore di classe conta 726il numero dei suoi utenti, e il contatore globale viene decrementato una 727sola volta quando il contatore di classe va a zero. 728 729Un esempio di questo tipo di conteggio dei riferimenti multi-livello può 730essere trovato nella gestore della memoria (``struct mm_sturct``: mm_user e 731mm_count), e nel codice dei filesystem (``struct super_block``: s_count e 732s_active). 733 734Ricordatevi: se un altro thread può trovare la vostra struttura dati, e non 735avete un contatore di riferimenti per essa, quasi certamente avete un baco. 736 73712) Macro, enumerati e RTL 738--------------------------- 739 740I nomi delle macro che definiscono delle costanti e le etichette degli 741enumerati sono scritte in maiuscolo. 742 743.. code-block:: c 744 745 #define CONSTANT 0x12345 746 747Gli enumerati sono da preferire quando si definiscono molte costanti correlate. 748 749I nomi delle macro in MAIUSCOLO sono preferibili ma le macro che assomigliano 750a delle funzioni possono essere scritte in minuscolo. 751 752Generalmente, le funzioni inline sono preferibili rispetto alle macro che 753sembrano funzioni. 754 755Le macro che contengono più istruzioni dovrebbero essere sempre chiuse in un 756blocco do - while: 757 758.. code-block:: c 759 760 #define macrofun(a, b, c) \ 761 do { \ 762 if (a == 5) \ 763 do_this(b, c); \ 764 } while (0) 765 766Cose da evitare quando si usano le macro: 767 7681) le macro che hanno effetti sul flusso del codice: 769 770.. code-block:: c 771 772 #define FOO(x) \ 773 do { \ 774 if (blah(x) < 0) \ 775 return -EBUGGERED; \ 776 } while (0) 777 778sono **proprio** una pessima idea. Sembra una chiamata a funzione ma termina 779la funzione chiamante; non cercate di rompere il decodificatore interno di 780chi legge il codice. 781 7822) le macro che dipendono dall'uso di una variabile locale con un nome magico: 783 784.. code-block:: c 785 786 #define FOO(val) bar(index, val) 787 788potrebbe sembrare una bella cosa, ma è dannatamente confusionario quando uno 789legge il codice e potrebbe romperlo con una cambiamento che sembra innocente. 790 7913) le macro con argomenti che sono utilizzati come l-values; questo potrebbe 792ritorcervisi contro se qualcuno, per esempio, trasforma FOO in una funzione 793inline. 794 7954) dimenticatevi delle precedenze: le macro che definiscono espressioni devono 796essere racchiuse fra parentesi. State attenti a problemi simili con le macro 797parametrizzate. 798 799.. code-block:: c 800 801 #define CONSTANT 0x4000 802 #define CONSTEXP (CONSTANT | 3) 803 8045) collisione nello spazio dei nomi quando si definisce una variabile locale in 805una macro che sembra una funzione: 806 807.. code-block:: c 808 809 #define FOO(x) \ 810 ({ \ 811 typeof(x) ret; \ 812 ret = calc_ret(x); \ 813 (ret); \ 814 }) 815 816ret è un nome comune per una variabile locale - __foo_ret difficilmente 817andrà in conflitto con una variabile già esistente. 818 819Il manuale di cpp si occupa esaustivamente delle macro. Il manuale di sviluppo 820di gcc copre anche l'RTL che viene usato frequentemente nel kernel per il 821linguaggio assembler. 822 82313) Visualizzare i messaggi del kernel 824-------------------------------------- 825 826Agli sviluppatori del kernel piace essere visti come dotti. Tenete un occhio 827di riguardo per l'ortografia e farete una belle figura. In inglese, evitate 828l'uso di parole mozzate come ``dont``: usate ``do not`` oppure ``don't``. 829Scrivete messaggi concisi, chiari, e inequivocabili. 830 831I messaggi del kernel non devono terminare con un punto fermo. 832 833Scrivere i numeri fra parentesi (%d) non migliora alcunché e per questo 834dovrebbero essere evitati. 835 836Ci sono alcune macro per la diagnostica in <linux/device.h> che dovreste 837usare per assicurarvi che i messaggi vengano associati correttamente ai 838dispositivi e ai driver, e che siano etichettati correttamente: dev_err(), 839dev_warn(), dev_info(), e così via. Per messaggi che non sono associati ad 840alcun dispositivo, <linux/printk.h> definisce pr_info(), pr_warn(), pr_err(), 841eccetera. 842 843Tirar fuori un buon messaggio di debug può essere una vera sfida; e quando 844l'avete può essere d'enorme aiuto per risolvere problemi da remoto. 845Tuttavia, i messaggi di debug sono gestiti differentemente rispetto agli 846altri. Le funzioni pr_XXX() stampano incondizionatamente ma pr_debug() no; 847essa non viene compilata nella configurazione predefinita, a meno che 848DEBUG o CONFIG_DYNAMIC_DEBUG non vengono impostati. Questo vale anche per 849dev_dbg() e in aggiunta VERBOSE_DEBUG per aggiungere i messaggi dev_vdbg(). 850 851Molti sottosistemi hanno delle opzioni di debug in Kconfig che aggiungono 852-DDEBUG nei corrispettivi Makefile, e in altri casi aggiungono #define DEBUG 853in specifici file. Infine, quando un messaggio di debug dev'essere stampato 854incondizionatamente, per esempio perché siete già in una sezione di debug 855racchiusa in #ifdef, potete usare printk(KERN_DEBUG ...). 856 85714) Assegnare memoria 858--------------------- 859 860Il kernel fornisce i seguenti assegnatori ad uso generico: 861kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc(), e vzalloc(). 862Per maggiori informazioni, consultate la documentazione dell'API: 863:ref:`Documentation/translations/it_IT/core-api/memory-allocation.rst <it_memory_allocation>` 864 865Il modo preferito per passare la dimensione di una struttura è il seguente: 866 867.. code-block:: c 868 869 p = kmalloc(sizeof(*p), ...); 870 871La forma alternativa, dove il nome della struttura viene scritto interamente, 872peggiora la leggibilità e introduce possibili bachi quando il tipo di 873puntatore cambia tipo ma il corrispondente sizeof non viene aggiornato. 874 875Il valore di ritorno è un puntatore void, effettuare un cast su di esso è 876ridondante. La conversione fra un puntatore void e un qualsiasi altro tipo 877di puntatore è garantito dal linguaggio di programmazione C. 878 879Il modo preferito per assegnare un vettore è il seguente: 880 881.. code-block:: c 882 883 p = kmalloc_array(n, sizeof(...), ...); 884 885Il modo preferito per assegnare un vettore a zero è il seguente: 886 887.. code-block:: c 888 889 p = kcalloc(n, sizeof(...), ...); 890 891Entrambe verificano la condizione di overflow per la dimensione 892d'assegnamento n * sizeof(...), se accade ritorneranno NULL. 893 894Questi allocatori generici producono uno *stack dump* in caso di fallimento 895a meno che non venga esplicitamente specificato __GFP_NOWARN. Quindi, nella 896maggior parte dei casi, è inutile stampare messaggi aggiuntivi quando uno di 897questi allocatori ritornano un puntatore NULL. 898 89915) Il morbo inline 900------------------- 901 902Sembra che ci sia la percezione errata che gcc abbia una qualche magica 903opzione "rendimi più veloce" chiamata ``inline``. In alcuni casi l'uso di 904inline è appropriato (per esempio in sostituzione delle macro, vedi 905capitolo 12), ma molto spesso non lo è. L'uso abbondante della parola chiave 906inline porta ad avere un kernel più grande, che si traduce in un sistema nel 907suo complesso più lento per via di una cache per le istruzioni della CPU più 908grande e poi semplicemente perché ci sarà meno spazio disponibile per una 909pagina di cache. Pensateci un attimo; una fallimento nella cache causa una 910ricerca su disco che può tranquillamente richiedere 5 millisecondi. Ci sono 911TANTI cicli di CPU che potrebbero essere usati in questi 5 millisecondi. 912 913Spesso le persone dicono che aggiungere inline a delle funzioni dichiarate 914static e utilizzare una sola volta è sempre una scelta vincente perché non 915ci sono altri compromessi. Questo è tecnicamente vero ma gcc è in grado di 916trasformare automaticamente queste funzioni in inline; i problemi di 917manutenzione del codice per rimuovere gli inline quando compare un secondo 918utente surclassano il potenziale vantaggio nel suggerire a gcc di fare una 919cosa che avrebbe fatto comunque. 920 92116) Nomi e valori di ritorno delle funzioni 922------------------------------------------- 923 924Le funzioni possono ritornare diversi tipi di valori, e uno dei più comuni 925è quel valore che indica se una funzione ha completato con successo o meno. 926Questo valore può essere rappresentato come un codice di errore intero 927(-Exxx = fallimento, 0 = successo) oppure un booleano di successo 928(0 = fallimento, non-zero = successo). 929 930Mischiare questi due tipi di rappresentazioni è un terreno fertile per 931i bachi più insidiosi. Se il linguaggio C includesse una forte distinzione 932fra gli interi e i booleani, allora il compilatore potrebbe trovare questi 933errori per conto nostro ... ma questo non c'è. Per evitare di imbattersi 934in questo tipo di baco, seguite sempre la seguente convenzione:: 935 936 Se il nome di una funzione è un'azione o un comando imperativo, 937 essa dovrebbe ritornare un codice di errore intero. Se il nome 938 è un predicato, la funzione dovrebbe ritornare un booleano di 939 "successo" 940 941Per esempio, ``add work`` è un comando, e la funzione add_work() ritorna 0 942in caso di successo o -EBUSY in caso di fallimento. Allo stesso modo, 943``PCI device present`` è un predicato, e la funzione pci_dev_present() ritorna 9441 se trova il dispositivo corrispondente con successo, altrimenti 0. 945 946Tutte le funzioni esportate (EXPORT) devono rispettare questa convenzione, e 947così dovrebbero anche tutte le funzioni pubbliche. Le funzioni private 948(static) possono non seguire questa convenzione, ma è comunque raccomandato 949che lo facciano. 950 951Le funzioni il cui valore di ritorno è il risultato di una computazione, 952piuttosto che l'indicazione sul successo di tale computazione, non sono 953soggette a questa regola. Solitamente si indicano gli errori ritornando un 954qualche valore fuori dai limiti. Un tipico esempio è quello delle funzioni 955che ritornano un puntatore; queste utilizzano NULL o ERR_PTR come meccanismo 956di notifica degli errori. 957 95817) L'uso di bool 959----------------- 960 961Nel kernel Linux il tipo bool deriva dal tipo _Bool dello standard C99. 962Un valore bool può assumere solo i valori 0 o 1, e implicitamente o 963esplicitamente la conversione a bool converte i valori in vero (*true*) o 964falso (*false*). Quando si usa un tipo bool il costrutto !! non sarà più 965necessario, e questo va ad eliminare una certa serie di bachi. 966 967Quando si usano i valori booleani, dovreste utilizzare le definizioni di true 968e false al posto dei valori 1 e 0. 969 970Per il valore di ritorno delle funzioni e per le variabili sullo stack, l'uso 971del tipo bool è sempre appropriato. L'uso di bool viene incoraggiato per 972migliorare la leggibilità e spesso è molto meglio di 'int' nella gestione di 973valori booleani. 974 975Non usate bool se per voi sono importanti l'ordine delle righe di cache o 976la loro dimensione; la dimensione e l'allineamento cambia a seconda 977dell'architettura per la quale è stato compilato. Le strutture che sono state 978ottimizzate per l'allineamento o la dimensione non dovrebbero usare bool. 979 980Se una struttura ha molti valori true/false, considerate l'idea di raggrupparli 981in un intero usando campi da 1 bit, oppure usate un tipo dalla larghezza fissa, 982come u8. 983 984Come per gli argomenti delle funzioni, molti valori true/false possono essere 985raggruppati in un singolo argomento a bit denominato 'flags'; spesso 'flags' è 986un'alternativa molto più leggibile se si hanno valori costanti per true/false. 987 988Detto ciò, un uso parsimonioso di bool nelle strutture dati e negli argomenti 989può migliorare la leggibilità. 990 99118) Non reinventate le macro del kernel 992--------------------------------------- 993 994Il file di intestazione include/linux/kernel.h contiene un certo numero 995di macro che dovreste usare piuttosto che implementarne una qualche variante. 996Per esempio, se dovete calcolare la lunghezza di un vettore, sfruttate la 997macro: 998 999.. code-block:: c 1000 1001 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 1002 1003Analogamente, se dovete calcolare la dimensione di un qualche campo di una 1004struttura, usate 1005 1006.. code-block:: c 1007 1008 #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 1009 1010Ci sono anche le macro min() e max() che, se vi serve, effettuano un controllo 1011rigido sui tipi. Sentitevi liberi di leggere attentamente questo file 1012d'intestazione per scoprire cos'altro è stato definito che non dovreste 1013reinventare nel vostro codice. 1014 101519) Linee di configurazione degli editor e altre schifezze 1016----------------------------------------------------------- 1017 1018Alcuni editor possono interpretare dei parametri di configurazione integrati 1019nei file sorgenti e indicati con dai marcatori speciali. Per esempio, emacs 1020interpreta le linee marcate nel seguente modo: 1021 1022.. code-block:: c 1023 1024 -*- mode: c -*- 1025 1026O come queste: 1027 1028.. code-block:: c 1029 1030 /* 1031 Local Variables: 1032 compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" 1033 End: 1034 */ 1035 1036Vim interpreta i marcatori come questi: 1037 1038.. code-block:: c 1039 1040 /* vim:set sw=8 noet */ 1041 1042Non includete nessuna di queste cose nei file sorgenti. Le persone hanno le 1043proprie configurazioni personali per l'editor, e i vostri sorgenti non 1044dovrebbero sovrascrivergliele. Questo vale anche per i marcatori 1045d'indentazione e di modalità d'uso. Le persone potrebbero aver configurato una 1046modalità su misura, oppure potrebbero avere qualche altra magia per far 1047funzionare bene l'indentazione. 1048 104920) Inline assembly 1050------------------- 1051 1052Nel codice specifico per un'architettura, potreste aver bisogno di codice 1053*inline assembly* per interfacciarvi col processore o con una funzionalità 1054specifica della piattaforma. Non esitate a farlo quando è necessario. 1055Comunque, non usatele gratuitamente quando il C può fare la stessa cosa. 1056Potete e dovreste punzecchiare l'hardware in C quando è possibile. 1057 1058Considerate la scrittura di una semplice funzione che racchiude pezzi comuni 1059di codice assembler piuttosto che continuare a riscrivere delle piccole 1060varianti. Ricordatevi che l' *inline assembly* può utilizzare i parametri C. 1061 1062Il codice assembler più corposo e non banale dovrebbe andare nei file .S, 1063coi rispettivi prototipi C definiti nei file d'intestazione. I prototipi C 1064per le funzioni assembler dovrebbero usare ``asmlinkage``. 1065 1066Potreste aver bisogno di marcare il vostro codice asm come volatile al fine 1067d'evitare che GCC lo rimuova quando pensa che non ci siano effetti collaterali. 1068Non c'è sempre bisogno di farlo, e farlo quando non serve limita le 1069ottimizzazioni. 1070 1071Quando scrivete una singola espressione *inline assembly* contenente più 1072istruzioni, mettete ognuna di queste istruzioni in una stringa e riga diversa; 1073ad eccezione dell'ultima stringa/istruzione, ognuna deve terminare con ``\n\t`` 1074al fine di allineare correttamente l'assembler che verrà generato: 1075 1076.. code-block:: c 1077 1078 asm ("magic %reg1, #42\n\t" 1079 "more_magic %reg2, %reg3" 1080 : /* outputs */ : /* inputs */ : /* clobbers */); 1081 108221) Compilazione sotto condizione 1083--------------------------------- 1084 1085Ovunque sia possibile, non usate le direttive condizionali del preprocessore 1086(#if, #ifdef) nei file .c; farlo rende il codice difficile da leggere e da 1087seguire. Invece, usate queste direttive nei file d'intestazione per definire 1088le funzioni usate nei file .c, fornendo i relativi stub nel caso #else, 1089e quindi chiamate queste funzioni senza condizioni di preprocessore. Il 1090compilatore non produrrà alcun codice per le funzioni stub, produrrà gli 1091stessi risultati, e la logica rimarrà semplice da seguire. 1092 1093È preferibile non compilare intere funzioni piuttosto che porzioni d'esse o 1094porzioni d'espressioni. Piuttosto che mettere una ifdef in un'espressione, 1095fattorizzate parte dell'espressione, o interamente, in funzioni e applicate 1096la direttiva condizionale su di esse. 1097 1098Se avete una variabile o funzione che potrebbe non essere usata in alcune 1099configurazioni, e quindi il compilatore potrebbe avvisarvi circa la definizione 1100inutilizzata, marcate questa definizione come __maybe_used piuttosto che 1101racchiuderla in una direttiva condizionale del preprocessore. (Comunque, 1102se una variabile o funzione è *sempre* inutilizzata, rimuovetela). 1103 1104Nel codice, dov'è possibile, usate la macro IS_ENABLED per convertire i 1105simboli Kconfig in espressioni booleane C, e quindi usatela nelle classiche 1106condizioni C: 1107 1108.. code-block:: c 1109 1110 if (IS_ENABLED(CONFIG_SOMETHING)) { 1111 ... 1112 } 1113 1114Il compilatore valuterà la condizione come costante (constant-fold), e quindi 1115includerà o escluderà il blocco di codice come se fosse in un #ifdef, quindi 1116non ne aumenterà il tempo di esecuzione. Tuttavia, questo permette al 1117compilatore C di vedere il codice nel blocco condizionale e verificarne la 1118correttezza (sintassi, tipi, riferimenti ai simboli, eccetera). Quindi 1119dovete comunque utilizzare #ifdef se il codice nel blocco condizionale esiste 1120solo quando la condizione è soddisfatta. 1121 1122Alla fine di un blocco corposo di #if o #ifdef (più di alcune linee), 1123mettete un commento sulla stessa riga di #endif, annotando la condizione 1124che termina. Per esempio: 1125 1126.. code-block:: c 1127 1128 #ifdef CONFIG_SOMETHING 1129 ... 1130 #endif /* CONFIG_SOMETHING */ 1131 1132Appendice I) riferimenti 1133------------------------ 1134 1135The C Programming Language, Second Edition 1136by Brian W. Kernighan and Dennis M. Ritchie. 1137Prentice Hall, Inc., 1988. 1138ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback). 1139 1140The Practice of Programming 1141by Brian W. Kernighan and Rob Pike. 1142Addison-Wesley, Inc., 1999. 1143ISBN 0-201-61586-X. 1144 1145Manuali GNU - nei casi in cui sono compatibili con K&R e questo documento - 1146per indent, cpp, gcc e i suoi dettagli interni, tutto disponibile qui 1147http://www.gnu.org/manual/ 1148 1149WG14 è il gruppo internazionale di standardizzazione per il linguaggio C, 1150URL: http://www.open-std.org/JTC1/SC22/WG14/ 1151 1152Kernel process/coding-style.rst, by greg@kroah.com at OLS 2002: 1153http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/ 1154