C¶
Le C est un langage de programmation impératif et généraliste de haut niveau, créé entre 1969 et 1973 aux Bell Labs par Dennis Ritchie. Des normes ISO ont été établies en 1989-1990 (C89 ou C90), en 1999 (C99) et en 2011 (C11). Pour en apprendre davantage sur le langage et l'impact de ces normes ISO, consultez les liens suivants :
- C, son historique, C90.
- C99, qui inclut les fonctions du langage et de la bibliothèque standard;
intn'est plus le type par défaut. - C11, une mise à jour majeure, qui a ajouté le modèle de mémoire et des fonctionnalités de concurrence (multifil, atomics, compare-and-swap).
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. Auparavant, il n'y avait 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
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.
Attention à l'utilisation de volatile
Le mot-clé volatile est souvent employé incorrectement en C parce qu'il est confondu avec le volatile de Java qui n'a pas du tout le même sens. Le mot-clé volatile en Java correspond en C à atomic_*, où l'astérisque représente un nom de type fondamental tel que int.
Compilateurs¶
GCC¶
Risques liés à l'option d'optimisation -O3
L'option -O3 de GCC comprend des améliorations qui peuvent être dangereuses, par exemple pour les fonctions de crénelage (aliasing).
Conseils pour l'optimisation GCC
En cas de doute, utilisez plutôt l'option -O2. Si vous avez le temps, consultez la page de manuel (par exemple, man gcc) et cherchez -O3; vous pourrez ainsi désactiver les paramètres qui ne sont pas sûrs.
Intel¶
Difficultés potentielles avec les compilateurs Intel
Les compilateurs C et C++ d'Intel risquent de causer des difficultés dans le cas d'opérations avec virgule flottante.
Respect des normes avec les compilateurs Intel
Prenez connaissance des pages de manuel 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.