Les standards du C (le langage, ISO/IEC 9899)
| Auteur | Message |
|---|---|
|
Ne fait pas parti d’un standard, mais est utile à mentionner : c-faq.com.
|
|
|
Voir aussi, sur des ajouts au standard, certains approuvés certains abandonnés : Experimental C standard libraries (cppreference.com).
|
|
|
Bien que le C soit un standard de fait, il n’en est pas universel pour autant. L’article ci‑dessous (qui me parle, pour des raisons que je ne décrit pas parce que pas assez de volonté pour ça à l’instant), décrit comment les processeurs actuels sont devenus complexes et gourmands en énergie, comme conséquence de vouloir continuer à donner l’illusion que le modèle sémantique du C est toujours valable alors qu’il ne l’est plus depuis longtemps. Dans le cas de l’exemple décrit dans l’article, la conséquence est même une lacune dans la fiabilité, une lacune malheureusement difficile à éviter.
Voir : C is not a low-level language — your computer is not a fast PDP‑11 (acm.org), David Chisnall, 2018. |
|
|
Hibou a écrit : […] Le mot clé “ restrict ” pour les “ pointer ”, pourrait être considéré comme capital, si on oubliait qu’il ne s’applique qu’au pointeur auquel il s’applique et non‑pas à ce que design le pointeur. En particulier, restrict ne permet pas d’affirmation sur l’aliasing indirect. Il n’y a même pas besoin d’aller chercher une indirection lointaine, elle peut être tout prêt : si p1 et p2 désignent deux tableaux et que p2 pointe vers un élément de p1, on a bien un aliasing alors que p1 et p2 sont différents. |
|
|
Hibou a écrit : Comme le standard du C a des lacunes sémantiques, un ajout au sujet : Defining the Undefinedness of C (illinois.edu). L’option “ -fsanitize=undefined ”, de Clang, le compilateur C de l’infrastructure LLVM, permet d’aider à déceler les opérations dont le résultat est indéfini d’après le standard du C. L’option produit une version instrumentée du programme, ce n’est pas une détection par de l’analyse statique. En marge, même si ce n’est pas le sujet, ne pas oublier que le standard POSIX, lui aussi, contient des notes à propos de circonstances dans lesquelles le résultat de certaines opérations doit être considéré comme indéfini. |
|
|
Une importante révision du langage C a été publiée en 2024. La nouvelle version s’appelle C23 et présente des nouveautés intéressantes. Il y a l’arithmétique avec test de débordement, comme ça existe depuis longtemps en Pascal ou en option avec TCC. Il y a l’arithmétique en virgule flottante décimale, au lieu de binaire, ce qui est important quand la représentation des nombre décimaux en binaire se fait mal (elle se fait toujours bien avec les entiers, mais pas toujours assez bien avec les nombres à virgules). La possibilité aussi d’écrire les nombres avec un séparateur pour les milliers ; le C a opté pour l’apostrophe au lieu du blanc souligné comme l’ont fait d’autres : ex. 1'000'000.
Comme avec les précédentes version de 1999 et 2011, la dernière ébauche du standard est disponible sans conditions, mais sa version définitive est encore plus chère que les précédentes : 238 € (c’est à dire 240 € … et on peut se demander comme cet achat est financé par des gens qui fournissent des compilateurs et pour qui tout doit être strictement gratuit, pas une poussière de cent de plus). Les documents intéressants :
|
|
|
Il faudrait distinguer le C de son ABI. Même si le C est polyvalent, il n’est pas commode, mais il est le standard base et de fait partout, même si on peut regretter que ça n’a pas été le Pascal comme ça aurait put l’être à une époque (les premières version de Windows, était en Pascal, pas en C ou C++). Mais il y a un standard qui vient du C, qui pose moins de problèmes et qui peut permettre à différent langages de se communiquer entre eux d’une manière relativement directe, c’est son ABI. Il faudrait peut‑être compléter ce topic par des références sur ce sujet.
|
