Programmation C Une version à jour et éditable de ce livre est disponible sur W

Programmation C Une version à jour et éditable de ce livre est disponible sur Wikilivres, une bibliothèque de livres pédagogiques, à l'URL : https://fr.wikibooks.org/wiki/Programmation_C Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la Licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans Texte de dernière page de couverture. Une copie de cette licence est incluse dans l'annexe nommée « Licence de documentation libre GNU ». Introduction Le langage C a été inventé aux Bells Labs en 1972 par Dennis Ritchie pour permettre l'écriture du système d'exploitation UNIX, alors développé par Ken Thompson et Dennis Ritchie. Le système d'exploitation UNIX, né à la fin des années 1960 - début des années 1970, a été écrit directement en langage assembleur pour les machines auxquelles il était destiné. Si le langage assembleur permettait d'écrire un tel système, il n'en était pas moins peu aisé à utiliser. Un tel langage est en effet particulier à un type de processeur, ce qui fait que tout le système devait être réécrit pour le faire fonctionner sur une nouvelle architecture. Cela fait que son principal créateur, Ken Thompson, souhaita rapidement utiliser un langage plus évolué pour réécrire UNIX. Parmi les langages disponibles à l'époque, BCPL (pour Basic Combined Programming Language, qui est une simplification de CPL), créé par Martin Richards en 1966, était intéressant. Sans entrer dans des descriptions détaillées, BCPL est un langage simple, procédural, et non typé. Sa simplicité permettait de créer facilement des compilateurs BCPL sur les machines de l'époque, où les ressources étaient très limitées (le premier ordinateur utilisé par Ken Thompson pour lancer Unix était un PDP-7, qui disposait d'une mémoire de 4000 mots de 18 bits, soit moins de 9 Ko). Ken Thompson l'a fait évoluer pour concevoir le langage B, qu'il a implémenté sur les premières machines UNIX. Cependant, certaines limitations du langage B ont fait qu'UNIX n'a pu être réécrit dans ce langage. À partir de 1971, Dennis Ritchie fit évoluer B, pour répondre à ces problèmes. À l'image des programmeurs qui incrémentent les versions de leurs programmes, Ritchie « incrémenta » la lettre B pour appeler le nouveau langage C. Cette évolution se « stabilisa » vers 1973, année à partir de laquelle UNIX et les utilitaires systèmes d'UNIX ont été réécrits avec succès en C. Par la suite en 1978, Brian W. Kernighan documenta très activement le langage, pour finalement publier avec Ritchie le livre de référence The C Programming Language. On appelle souvent C K&R le langage tel que spécifié dans la première édition de ce livre. Dans les années qui suivirent, le langage C fut porté sur de nombreuses autres machines. Ces portages ont souvent été faits, au début, à partir du compilateur pcc de Steve Johnson, mais par la suite des compilateurs originaux furent développés indépendamment. Durant ces années, chaque compilateur C fut écrit en suivant les spécifications du K&R, mais certains ajoutaient des extensions, comme des types de données ou des fonctions supplémentaires, ou interprétaient différemment certaines parties du livre (qui n'était pas forcément très précis). À cause de cela, il fut de moins en moins facile d'écrire des programmes en C qui puissent fonctionner tels quels sur un grand nombre d'architectures. Pour résoudre ce problème, et ajouter au C des possibilités dont le besoin se faisait sentir (et déjà existantes dans certains compilateurs), en 1989, l'organisme national de normalisation des USA (ANSI) normalisa le C. Le nom exact de cette norme est ANSI X3.159-1989 Programming Language C, mais elle fut (et est toujours) connue sous les dénominations ANSI C ou C89. Puis l'ANSI soumit cette norme à l'Organisation internationale de normalisation (ou ISO), qui l'accepta telle quelle et la publia l'année suivante sous le numéro ISO/IEC 9899:1990 (le document étant connu sous le nom ISO C90, ou C90). Le besoin de normalisation de l'époque étant extrêmement pressant, pratiquement tous les éditeurs de compilateurs C de l'époque se sont mis à modifier leurs compilateurs pour supporter la norme (et même n'ont pas attendu la publication officielle pour lancer ces modifications), et de fait la quasi totalité des implémentations existant à ce jour comprennent ces normes. L'ISO publia dans les années qui suivirent deux ensembles de correctifs, et un amendement pour la gestion des caractères internationaux. Étant donnée la grande diversité des implémentations existants au moment de l'élaboration de la norme, et le principe de négociation qui base les processus de normalisation, la norme C est un compromis. Son but était principalement double : d'une part assurer le plus possible la portabilité du code C, pour simplifier le portage de programmes C d'une implémentation à une autre (ce qui était souvent un cauchemar à réaliser), d'autre part donner une certaine liberté aux éditeurs pour proposer des extensions spécifiques. Pour ce faire, la norme a défini des niveaux de conformité pour les programmes C et les implémentations, allant du programme strictement conforme, que toute implémentation doit accepter, et qui fonctionnera exactement de la même manière, aux programmes dépendant d'extensions. On peut noter que le livre de Kernighan et Ritchie a été republié dans une seconde édition, pour refléter les changements du C89. Enfin, en 1999, l'organisme ISO proposa une nouvelle version de la norme, qui reprenait quelques bonnes idées du langage C++ (voir plus bas). Il ajouta aussi le type long long d'une taille minimale de 64 bits, les types complexes, l'initialisation des structures avec des champs nommés, parmi les modifications les plus visibles. Le nouveau document, qui au niveau de l'ISO est celui ayant autorité aujourd'hui, est ISO/IEC 9899:1999, connu sous le sigle C99. Deux ensembles de correctifs à cette version ont été publiés jusqu'à présent. Au sens strict, la dénomination ISO C correspond donc actuellement à la norme de 1999 corrigée, mais l'usage est tel qu'il est préférable de toujours préciser de quelle version on parle (89/90 ou 99), et c'est ce qui sera fait dans cet ouvrage lorsque la distinction sera nécessaire. Il est à noter que, si la norme C90 a été largement adoptée par les éditeurs de compilateurs C, très peu implémentent la version C99. En effet, le besoin des utilisateurs s'est fait moins pressant, et l'effort nécessaire pour rendre les compilateurs conformes a rarement été mené à terme. L'activité du groupe de travail de la norme C est, depuis, portée plus sur la « maintenance » du langage qu'à de véritables « évolutions ». La prochaine version, pour l'instant dénommée officieusement C1X et ISO/IEC 9899:201x officiellement, n'est pas encore publiée et ne sera pas étudiée dans ce livre[1]. La norme C spécifie la syntaxe du langage ainsi qu'une bibliothèque de fonctions simple. Cette bibliothèque est moins fournie que dans d'autres langages, mais cela est dû au domaine d'utilisation très varié de ce langage. En particulier, pour assurer une portabilité maximale du langage entre les implémentations embarquées, les ordinateurs de type PC et les supercalculateurs (par exemple), certaines fonctions n'ont pas été acceptées dans la norme. On peut citer, entre autres, la programmation parallèle, les communications entre processus, la communication réseau ou les interfaces graphiques... Cela fait qu'en parallèle de cette normalisation du langage C, certaines extensions ont elles aussi été standardisées, voire normalisées. Ainsi, par exemple, des fonctions spécifiques aux systèmes UNIX, sur lesquels ce langage est toujours très populaire, et qui n'ont pas été intégrées dans la norme du langage C, ont servi à définir une partie de la norme POSIX. Historique Naissance Développement Normalisation Dans ce livre, nous étudierons surtout le langage C tel que défini dans les normes ISO citées ci-dessus. La norme C99 n'étant pas implémentée par tous les compilateurs, et beaucoup de programmes existants étant développés en C90, les différences entre les deux normes seront indiquées à chaque fois que nécessaire. Toutefois, nous illustrerons certains chapitres avec des exemples d'extensions courantes qu'un développeur C peut rencontrer, en particulier concernant les fonctions qui ne sont pas fournies par la norme C elle-même. Mais ces exemples d'extensions seront mineurs. D'autres Wikilivres étudient plus en détails de telles extensions, vous pouvez les trouver en regardant les livres listés sur la page Catégorie:C. La norme qui définit le langage C est élaborée au niveau international par un groupe de travail (working group) de l'ISO. Ce groupe de travail fait partie plus précisément du comité technique commun à l'ISO et à la Commission Electrotechnique Internationale, le Joint Technical Commitee 1, qui élabore les normes internationales concernant les technologies de l'information. Il se décompose en sous-comités, donc le SC22, responsable des langages informatiques. Le SC22 rassemble plusieurs groupes de travail, chacun portant sur un langage spécifique, ou sur des considérations indépendantes des langages. On peut ainsi citer, par exemple : JTC1/SC22/WG9 pour Ada ; JTC1/SC22/WG14 pour le C ; JTC1/SC22/WG21 pour le C++. Comme pour toute norme internationale, c'est l'ISO qui décide des modalités de sa distribution. Comme la grande majorité des normes ISO, celle-ci n'est pas en libre distribution, mais en vente[2]. uploads/Litterature/ programmation-c-version-imprimable.pdf

  • 55
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager