X. Conclusion▲
Les choix fondamentaux effectués par les concepteurs du langage C résultent (probablement) d'un compromis entre deux objectifs quelque peu contradictoires :
-
avoir un langage capable de manipuler des données avec
suffisamment d'abstraction pour permettre au programmeur
d'ignorer largement les mécanismes sous-jacents impliqués
dans l'interprétation et l'exécution de leur code;
- avoir un langage permettant également une programmation bas niveau adaptée à une machine donnée, ce qui impose une connaissance détaillée du fonctionnement de celle-ci, mais aussi du comportement du compilateur.
Les concepteurs du langage ont élaboré une trame conceptuelle,
permettant de résoudre le premier point, en laissant au langage
suffisamment de degrés de libertés pour répondre au second.
C'est cette trame que le présent document avait pour but de
mettre en évidence et l'importance accordée aux grandeurs (et aux
expressions) dans ce texte se justifie par
l'incidence qu'elles ont sur la conception du langage.
Les nombreux degrés de libertés apportent la souplesse
nécessaire au langage mais le rendent délicat à utiliser dès
qu'on veut obtenir un programme portable. Les termes
"comportement indéfini", "comportement déterminé par
l'implémentation", etc. sont extrêmement fréquents dans la
norme. Des choses qui semblent parmi les plus élémentaires
peuvent varier d'un système à l'autre, comme par exemple la
gamme des valeurs représentables par un entier d'un type donné
ainsi que leur représentation binaire (la norme accepte trois
méthodes différentes pour représenter les nombres signés !).
Le langage C a la réputation d'être un langage compliqué. Cette
réputation est fondée souvent sur de bien mauvaises raisons (syntaxe
mal comprise, notion d'adresse et de pointeurs mal assimilée,
confusions avec les tableaux, etc.). C'est plutôt finalement un
langage avec une structure de base simple mais la souplesse dont
on l'a doté crée des comportements délicats qu'il faut
maîtriser.
Il me semble impossible de maîtriser ce langage
sans comprendre ses méthodes de raisonnement, les mécanismes
sous-jacents mis
en oeuvre et l'interprétation du code source par le compilateur.
Ce document avait pour but de vous y aider.