C/fr
C¶
Le C est un langage de programmation impératif et généraliste de haut niveau créé entre 1969 et 1973 chez Bell Labs par Dennis Ritchie. Il existe aujourd'hui des normes ISO qui ont été établies en 1989-1990 (C89 ou C90), en 1999 (C99) et en 2011 (C11). Pour en apprendre plus sur le langage et sur l'impact des normes ISO, voici les liens suivants :
- C, historique, C90.
- C99, inclut les fonctions du langage et de la bibliothèque standard;
intn'est plus le type par défaut. - C11, mise à jour majeure, ajout du modèle de mémoire et des fonctionnalités de concurrence (multifil, atomics, compare-and-swap).
Avertissement sur les sources
Ces liens peuvent mener à des pages qui contiennent des erreurs. Le document officiel peut être commandé auprès du Conseil canadien des normes.
Meilleurs modèles de mémoire et de concurrence¶
Ces modèles sont apparus dans la norme ISO de 2011; il n'y avait auparavant aucune gestion des accès concurrents à la mémoire en lecture et en écriture, par exemple en ce qui a trait aux comportements ambigus qui ont ou non été documentés par les fournisseurs de compilateurs.
Recommandation pour la concurrence
Nous recommandons de compiler le code C comportant de la concurrence en C11 ou plus.
Pièges¶
Mot-clé volatile¶
Le modificateur volatile a un sens très particulier en C et C++ comme vous le constaterez en lisant cette page. L'emploi de ce modificateur est toutefois rare et se limite à certains types de code de bas niveau.
volatile est employé incorrectement en C, car on le confond avec le volatile Java qui n'a pas du tout le même sens. Le mot-clé Java volatile correspond en C à atomic_*, où l'astérisque représente un nom de type fondamental tel que int.
Compilateurs¶
GCC¶
L'option -O3 comprend des améliorations possiblement dangereuses, par exemple pour les fonctions de crénelage (aliasing).
Attention : Optimisation GCC
En cas de doute, utilisez plutôt l'option -O2. Si vous avez le temps, lisez la page man (par exemple man gcc) et cherchez -O3; vous pourrez ainsi désactiver les paramètres qui ne sont pas sûrs.
Intel¶
Les compilateurs C et C++ d'Intel risquent de causer des difficultés dans le cas d'opérations avec virgule flottante.
Attention : Virgule flottante Intel
Prenez connaissance des pages man Intel (par exemple man icc) et utilisez les options -fp-model precise ou -fp-model source pour respecter les normes ANSI, ISO et IEEE. Pour plus de détails, consultez ce document.