Lines Matching +full:non +full:- +full:l
1 .. include:: ../disclaimer-ita.rst
3 :Original: :ref:`Documentation/process/coding-style.rst <codingstyle>`
12 il kernel Linux. Lo stile di codifica è molto personale e non voglio
14 dev'essere usato per qualsiasi cosa che io sia in grado di mantenere, e l'ho
19 di codifica GNU e di NON leggerla. Bruciatela, è un grande gesto simbolico.
24 ---------------
27 alcuni movimenti di eretici che vorrebbero l'indentazione a 4 (o perfino 2!)
29 pi-greco a 3.
31 Motivazione: l'idea dell'indentazione è di definire chiaramente dove un blocco
42 In breve, l'indentazione ad 8 caratteri rende più facile la lettura, e in
46 Al fine di facilitare l'indentazione del costrutto switch, si preferisce
51 .. code-block:: c
70 A meno che non vogliate nascondere qualcosa, non mettete più istruzioni sulla
73 .. code-block:: c
78 Non usate le virgole per evitare le parentesi:
80 .. code-block:: c
87 .. code-block:: c
94 Non mettete nemmeno più assegnamenti sulla stessa riga. Lo stile del kernel
99 spazi non vengono mai usati per l'indentazione, e l'esempio qui sopra è
102 Procuratevi un buon editor di testo e non lasciate spazi bianchi alla fine
107 -----------------------------------
115 pezzi più piccoli, a meno che eccedere le 80 colonne non aiuti ad
125 Tuttavia, non spezzettate mai le stringhe visibili agli utenti come i
130 ---------------------------------------------
134 dell'indentazione, non ci sono motivi tecnici sulla base dei quali scegliere
140 .. code-block:: c
146 Questo è valido per tutte le espressioni che non siano funzioni (if, switch,
149 .. code-block:: c
165 .. code-block:: c
175 sono comunque speciali (non potete annidarle in C).
179 espressione, in pratica ``while`` nell'espressione do-while, oppure ``else``
180 nell'espressione if-else, come questo:
182 .. code-block:: c
185 body of do-loop
190 .. code-block:: c
204 righe sul vostro schermo non sono una risorsa illimitata (pensate ad uno
208 Non usate inutilmente le graffe dove una singola espressione è sufficiente.
210 .. code-block:: c
217 .. code-block:: none
224 Questo non vale nel caso in cui solo un ramo dell'espressione if-else
228 .. code-block:: c
239 .. code-block:: c
251 (quasi tutte) le parole chiave. L'eccezioni più evidenti sono sizeof, typeof,
254 linguaggio non lo richiede; come ``sizeof info`` dopo aver dichiarato
261 ma non con sizeof, typeof, alignof, o __attribute__. Ad esempio,
263 .. code-block:: c
268 Non aggiungete spazi attorno (dentro) ad un'espressione fra parentesi. Questo
271 .. code-block:: c
277 puntatore, il posto suggerito per l'asterisco ``*`` è adiacente al nome della
278 variabile o della funzione, e non adiacente al nome del tipo. Esempi:
280 .. code-block:: c
290 = + - < > * / % | & ^ <= >= == != ? :
292 ma non mettete spazi dopo gli operatori unari::
294 & * + - ~ ! sizeof typeof alignof __attribute__ defined
296 nessuno spazio dopo l'operatore unario suffisso di incremento o decremento::
298 ++ --
300 nessuno spazio dopo l'operatore unario prefisso di incremento o decremento::
302 ++ --
305 ``->``.
307 Non lasciate spazi bianchi alla fine delle righe. Alcuni editor con
308 l'indentazione ``furba`` inseriranno gli spazi bianchi all'inizio di una nuova
310 immediatamente. Tuttavia, alcuni di questi stessi editor non rimuovono
311 questi spazi bianchi quando non scrivete nulla sulla nuova riga, ad esempio
321 -----------------
324 contrario dei programmatori Modula-2 o Pascal, i programmatori C non usano
327 non è una delle più difficili da capire.
336 qualcosa di simile, **non** dovreste chiamarla ``cntusr()``.
339 ungherese) è stupido - il compilatore conosce comunque il tipo e
344 Chiamarlo ``loop_counter`` non è produttivo, non ci sono possibilità che
345 ``i`` possa non essere capito. Analogamente, ``tmp`` può essere una qualsiasi
353 --------------------------------
355 Per favore non usate cose come ``vps_t``.
358 .. code-block:: c
365 .. code-block:: c
372 Non molto. Sono utili per:
375 scopo di **nascondere** cosa sia davvero l'oggetto).
381 Gli oggetti opachi e le ``funzioni accessorie`` non sono, di per se,
383 che davvero non c'è alcuna informazione portabile.
385 (b) i tipi chiaramente interi, dove l'astrazione **aiuta** ad evitare
393 Ancora - dev'esserci una **ragione** per farlo. Se qualcosa è
394 ``unsigned long``, non c'è alcun bisogno di avere:
409 tipi standard come ``uint32_t``, alcune persone ne obiettano l'uso.
412 con segno, identici ai tipi standard, sono permessi- tuttavia, non sono
417 In alcune strutture dati visibili dallo spazio utente non possiamo
418 richiedere l'uso dei tipi C99 e nemmeno i vari ``u32`` descritti prima.
423 non usare MAI MAI un typedef a meno che non rientri in una delle regole
427 modo ragionevole, non dovrebbero **mai** essere definite con un typedef.
430 -----------
439 lunga (ma semplice) sequenza di caso-istruzione, dove avete molte piccole cose
443 non particolarmente dotato del primo anno delle scuole superiori potrebbe
444 non capire cosa faccia la funzione, allora dovreste attenervi strettamente ai
450 Un'altra misura delle funzioni sono il numero di variabili locali. Non
451 dovrebbero eccedere le 5-10, oppure state sbagliando qualcosa. Ripensate la
461 .. code-block:: c
473 Nonostante questo non sia richiesto dal linguaggio C, in Linux viene preferito
477 Non usate la parola chiave ``extern`` con le dichiarazioni di funzione perché
478 rende le righe più lunghe e non è strettamente necessario.
480 …scrivete i prototipi di funzione mantenete `l'ordine degli elementi <https://lore.kernel.org/mm-co…
487 L'ordine suggerito per gli elementi di un prototipo di funzione è il seguente:
489 - classe d'archiviazione (in questo caso ``static __always_inline``. Da notare
492 - attributi della classe di archiviazione (in questo caso ``__init``, in altre
494 - il tipo di ritorno (in questo caso, ``void *``)
495 - attributi per il valore di ritorno (in questo caso, ``__must_check``)
496 - il nome della funzione (in questo caso, ``action``)
497 - i parametri della funzione(in questo caso,
500 - attributi dei parametri (in questo caso, ``__printf(4, 5)``)
501 - attributi per il comportamento della funzione (in questo caso, ``__malloc_``)
504 della funzione), il compilatore non permette di usare gli attributi per i
516 ------------------------------------------
518 Sebbene sia deprecata da molte persone, l'istruzione goto è impiegata di
521 L'istruzione goto diventa utile quando una funzione ha punti d'uscita multipli
522 e vanno eseguite alcune procedure di pulizia in comune. Se non è necessario
527 se la goto libera (free) un ``buffer``. Evitate l'uso di nomi GW-BASIC come
533 - i salti incondizionati sono più facili da capire e seguire
534 - l'annidamento si riduce
535 - si evita di dimenticare, per errore, di aggiornare un singolo punto d'uscita
536 - aiuta il compilatore ad ottimizzare il codice ridondante ;)
538 .. code-block:: c
547 return -ENOMEM;
565 .. code-block:: c
568 kfree(foo->bar);
576 .. code-block:: c
579 kfree(foo->bar);
589 -----------
596 Solitamente, i commenti devono dire COSA fa il codice, e non COME lo fa.
601 (o brutto), ma cercate di non esagerare. Invece, mettete i commenti in
606 formato kernel-doc. Per maggiori dettagli, leggete i file in
607 :ref::ref:`Documentation/translations/it_IT/doc-guide/ <it_doc_guide>` e in
608 ``script/kernel-doc``.
610 Lo stile preferito per i commenti più lunghi (multi-riga) è:
612 .. code-block:: c
615 * This is the preferred style for multi-line
620 * with beginning and ending almost-blank lines.
624 più lunghi (multi-riga) è leggermente diverso.
626 .. code-block:: c
632 * but there is no initial almost-blank line.
638 commento per spiegarne l'uso.
642 ---------------------------
647 i modi predefiniti non sono proprio allettanti (infatti, sono peggio che
648 premere tasti a caso - un numero infinito di scimmie che scrivono in
649 GNU emacs non faranno mai un buon programma).
655 .. code-block:: none
657 (defun c-lineup-arglist-tabs-only (ignored)
659 (let* ((anchor (c-langelem-pos c-syntactic-element))
660 (column (c-langelem-2nd-pos c-syntactic-element))
661 (offset (- (1+ column) anchor))
662 (steps (floor offset c-basic-offset)))
664 c-basic-offset)))
666 (dir-locals-set-class-variables
667 'linux-kernel
668 '((c-mode . (
669 (c-basic-offset . 8)
670 (c-label-minimum-indentation . 0)
671 (c-offsets-alist . (
672 (arglist-close . c-lineup-arglist-tabs-only)
673 (arglist-cont-nonempty .
674 (c-lineup-gcc-asm-reg c-lineup-arglist-tabs-only))
675 (arglist-intro . +)
676 (brace-list-intro . +)
677 (c . c-lineup-C-comments)
678 (case-label . 0)
679 (comment-intro . c-lineup-comment)
680 (cpp-define-intro . +)
681 (cpp-macro . -1000)
682 (cpp-macro-cont . +)
683 (defun-block-intro . +)
684 (else-clause . 0)
685 (func-decl-cont . +)
687 (inher-cont . c-lineup-multi-inher)
688 (knr-argdecl-intro . 0)
689 (label . -1000)
691 (statement-block-intro . +)
692 (statement-case-intro . +)
693 (statement-cont . +)
696 (indent-tabs-mode . t)
697 (show-trailing-whitespace . t)
700 (dir-locals-set-directory-class
701 (expand-file-name "~/src/linux-trees")
702 'linux-kernel)
705 si trovano nella cartella ``~/src/linux-trees``.
708 non tutto è perduto: usate ``indent``.
712 Tuttavia, non è così terribile, perché perfino i creatori di GNU indent
713 riconoscono l'autorità di K&R (le persone del progetto GNU non sono cattive,
715 ``-kr -i8`` (che significa ``K&R, 8 caratteri di indentazione``), o utilizzate
716 ``scripts/Lindent`` che indenterà usando l'ultimo stile.
720 Ma ricordatevi: ``indent`` non è un correttore per una cattiva programmazione.
722 Da notare che potete utilizzare anche ``clang-format`` per aiutarvi con queste
729 :ref:`Documentation/translations/it_IT/process/clang-format.rst <it_clangformat>`.
733 ----------------------------------
736 sorgenti, l'indentazione è un po' differente. Le linee dopo un ``config``
746 logging of avc messages output). Does not do system-call
759 il documento Documentation/kbuild/kconfig-language.rst
763 ------------------
767 avere un contatore di riferimenti. Nel kernel non esiste un
774 in parallelo - e non doversi preoccupare di una struttura dati che
778 Da notare che la sincronizzazione **non** si sostituisce al conteggio dei
781 della memoria. Solitamente servono entrambe le cose, e non vanno confuse fra
789 Un esempio di questo tipo di conteggio dei riferimenti multi-livello può
794 Ricordatevi: se un altro thread può trovare la vostra struttura dati, e non
798 ---------------------------
803 .. code-block:: c
816 blocco do - while:
818 .. code-block:: c
830 .. code-block:: c
835 return -EBUGGERED; \
839 la funzione chiamante; non cercate di rompere il decodificatore interno di
844 .. code-block:: c
851 3) le macro con argomenti che sono utilizzati come l-values; questo potrebbe
859 .. code-block:: c
867 .. code-block:: c
876 ret è un nome comune per una variabile locale - __foo_ret difficilmente
880 di gcc copre anche l'RTL che viene usato frequentemente nel kernel per il
884 --------------------------------------
887 di riguardo per l'ortografia e farete una belle figura. In inglese, evitate
888 l'uso incorretto di abbreviazioni come ``dont``: usate ``do not`` oppure
891 I messaggi del kernel non devono terminare con un punto fermo.
893 Scrivere i numeri fra parentesi (%d) non migliora alcunché e per questo
899 dev_warn(), dev_info(), e così via. Per messaggi che non sono associati ad
904 l'avete può essere d'enorme aiuto per risolvere problemi da remoto.
907 essa non viene compilata nella configurazione predefinita, a meno che
908 DEBUG o CONFIG_DYNAMIC_DEBUG non vengono impostati. Questo vale anche per
912 -DDEBUG nei corrispettivi Makefile, e in altri casi aggiungono #define DEBUG
918 ---------------------
923 :ref:`Documentation/translations/it_IT/core-api/memory-allocation.rst <it_memory_allocation>`
927 .. code-block:: c
933 puntatore cambia tipo ma il corrispondente sizeof non viene aggiornato.
941 .. code-block:: c
947 .. code-block:: c
955 a meno che non venga esplicitamente specificato __GFP_NOWARN. Quindi, nella
960 -------------------
963 opzione "rendimi più veloce" chiamata ``inline``. In alcuni casi l'uso di
965 capitolo 12), ma molto spesso non lo è. L'uso abbondante della parola chiave
974 static e utilizzare una sola volta è sempre una scelta vincente perché non
982 -------------------------------------------
987 (-Exxx = fallimento, 0 = successo) oppure un booleano di successo
988 (0 = fallimento, non-zero = successo).
993 errori per conto nostro ... ma questo non c'è. Per evitare di imbattersi
1002 in caso di successo o -EBUSY in caso di fallimento. Allo stesso modo,
1008 (static) possono non seguire questa convenzione, ma è comunque raccomandato
1012 piuttosto che l'indicazione sul successo di tale computazione, non sono
1018 17) L'uso di bool
1019 -----------------
1024 falso (*false*). Quando si usa un tipo bool il costrutto !! non sarà più
1030 Per il valore di ritorno delle funzioni e per le variabili sullo stack, l'uso
1031 del tipo bool è sempre appropriato. L'uso di bool viene incoraggiato per
1035 Non usate bool se per voi sono importanti l'ordine delle righe di cache o
1036 la loro dimensione; la dimensione e l'allineamento cambia a seconda
1038 ottimizzate per l'allineamento o la dimensione non dovrebbero usare bool.
1040 Se una struttura ha molti valori true/false, considerate l'idea di raggrupparli
1051 18) Non reinventate le macro del kernel
1052 ---------------------------------------
1059 .. code-block:: c
1066 .. code-block:: c
1068 #define sizeof_field(t, f) (sizeof(((t*)0)->f))
1072 d'intestazione per scoprire cos'altro è stato definito che non dovreste
1076 -----------------------------------------------------------
1082 .. code-block:: c
1084 -*- mode: c -*-
1088 .. code-block:: c
1092 compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c"
1098 .. code-block:: c
1102 Non includete nessuna di queste cose nei file sorgenti. Le persone hanno le
1103 proprie configurazioni personali per l'editor, e i vostri sorgenti non
1107 funzionare bene l'indentazione.
1110 -------------------
1114 specifica della piattaforma. Non esitate a farlo quando è necessario.
1115 Comunque, non usatele gratuitamente quando il C può fare la stessa cosa.
1116 Potete e dovreste punzecchiare l'hardware in C quando è possibile.
1120 varianti. Ricordatevi che l' *inline assembly* può utilizzare i parametri C.
1122 Il codice assembler più corposo e non banale dovrebbe andare nei file .S,
1127 d'evitare che GCC lo rimuova quando pensa che non ci siano effetti collaterali.
1128 Non c'è sempre bisogno di farlo, e farlo quando non serve limita le
1134 al fine di allineare correttamente l'assembler che verrà generato:
1136 .. code-block:: c
1143 ---------------------------------
1145 Ovunque sia possibile, non usate le direttive condizionali del preprocessore
1150 compilatore non produrrà alcun codice per le funzioni stub, produrrà gli
1153 È preferibile non compilare intere funzioni piuttosto che porzioni d'esse o
1158 Se avete una variabile o funzione che potrebbe non essere usata in alcune
1168 .. code-block:: c
1174 Il compilatore valuterà la condizione come costante (constant-fold), e quindi
1176 non ne aumenterà il tempo di esecuzione. Tuttavia, questo permette al
1186 .. code-block:: c
1193 ------------------------
1198 ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
1202 Addison-Wesley, Inc., 1999.
1203 ISBN 0-201-61586-X.
1205 Manuali GNU - nei casi in cui sono compatibili con K&R e questo documento -
1210 URL: https://www.open-std.org/JTC1/SC22/WG14/