During a patch discussion, Linus brought up the option of changing the C standard version from gnu89 to gnu99, which allows using variable declaration inside of a for() loop. While the C99, C11 and later standards introduce many other features, most of these are already available in gnu89 as GNU extensions as well. An earlier attempt to do this when gcc-5 started defaulting to -std=gnu11 failed because at the time that caused warnings about designated initializers with older compilers. Now that gcc-5.1 is the minimum compiler version used for building kernels, that is no longer a concern. Similarly, the behavior of 'inline' functions changes between gnu89 using gnu_inline behavior and gnu11 using standard c99+ behavior, but this was taken care of by defining 'inline' to include __attribute__((gnu_inline)) in order to allow building with clang a while ago. Nathan Chancellor reported a new -Wdeclaration-after-statement warning that appears in a system header on arm, this still needs a workaround. The differences between gnu99, gnu11, gnu1x and gnu17 are fairly minimal and mainly impact warnings at the -Wpedantic level that the kernel never enables. Between these, gnu11 is the newest version that is supported by all supported compiler versions, though it is only the default on gcc-5, while all other supported versions of gcc or clang default to gnu1x/gnu17. Link: https://lore.kernel.org/lkml/CAHk-=wiyCH7xeHcmiFJ-YgXUy2Jaj7pnkdKpcovt8fYbVFW3TA@mail.gmail.com/ Link: https://github.com/ClangBuiltLinux/linux/issues/1603 Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Acked-by: Marco Elver <elver@google.com> Acked-by: Jani Nikula <jani.nikula@intel.com> Acked-by: David Sterba <dsterba@suse.com> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> Reviewed-by: Alex Shi <alexs@kernel.org> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Reviewed-by: Miguel Ojeda <ojeda@kernel.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
54 lines
2.4 KiB
ReStructuredText
54 lines
2.4 KiB
ReStructuredText
.. include:: ../disclaimer-ita.rst
|
|
|
|
:Original: :ref:`Documentation/process/programming-language.rst <programming_language>`
|
|
:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
|
|
|
|
.. _it_programming_language:
|
|
|
|
Linguaggio di programmazione
|
|
============================
|
|
|
|
Il kernel è scritto nel linguaggio di programmazione C [it-c-language]_.
|
|
Più precisamente, il kernel viene compilato con ``gcc`` [it-gcc]_ usando
|
|
l'opzione ``-std=gnu11`` [it-gcc-c-dialect-options]_: il dialetto GNU
|
|
dello standard ISO C11.
|
|
Linux supporta anche ``clang`` [it-clang]_, leggete la documentazione
|
|
:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
|
|
|
|
Questo dialetto contiene diverse estensioni al linguaggio [it-gnu-extensions]_,
|
|
e molte di queste vengono usate sistematicamente dal kernel.
|
|
|
|
Il kernel offre un certo livello di supporto per la compilazione con
|
|
``icc`` [it-icc]_ su diverse architetture, tuttavia in questo momento
|
|
il supporto non è completo e richiede delle patch aggiuntive.
|
|
|
|
Attributi
|
|
---------
|
|
|
|
Una delle estensioni più comuni e usate nel kernel sono gli attributi
|
|
[it-gcc-attribute-syntax]_. Gli attributi permettono di aggiungere una semantica,
|
|
definita dell'implementazione, alle entità del linguaggio (come le variabili,
|
|
le funzioni o i tipi) senza dover fare importanti modifiche sintattiche al
|
|
linguaggio stesso (come l'aggiunta di nuove parole chiave) [it-n2049]_.
|
|
|
|
In alcuni casi, gli attributi sono opzionali (ovvero un compilatore che non
|
|
dovesse supportarli dovrebbe produrre comunque codice corretto, anche se
|
|
più lento o che non esegue controlli aggiuntivi durante la compilazione).
|
|
|
|
Il kernel definisce alcune pseudo parole chiave (per esempio ``__pure``)
|
|
in alternativa alla sintassi GNU per gli attributi (per esempio
|
|
``__attribute__((__pure__))``) allo scopo di mostrare quali funzionalità si
|
|
possono usare e/o per accorciare il codice.
|
|
|
|
Per maggiori informazioni consultate il file d'intestazione
|
|
``include/linux/compiler_attributes.h``.
|
|
|
|
.. [it-c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards
|
|
.. [it-gcc] https://gcc.gnu.org
|
|
.. [it-clang] https://clang.llvm.org
|
|
.. [it-icc] https://software.intel.com/en-us/c-compilers
|
|
.. [it-gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
|
|
.. [it-gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
|
|
.. [it-gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html
|
|
.. [it-n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf
|