C (langage) Aller à : Navigation, rechercher Pour les articles homonymes, voir
C (langage) Aller à : Navigation, rechercher Pour les articles homonymes, voir C. C Apparu en 1972 Auteur Dennis Ritchie Développeur Dennis Ritchie & Bell Labs Paradigme Programmation impérative, procédurale, structurée Typage statique, faible Normes ANSI X3.159-1989 (ANSI C, C89) ISO/CEI 9899:1990 (C90) ISO/CEI 9899:1999 (C99) ISO/IEC 9899:2011 (C11) Influencé par ALGOL 60 à travers CPL, BCPL, puis B A influencé awk, csh, C++, C#, ObjC, BitC, D, Concurrent C, Java, JavaScript, PHP, Perl... Implémentations GCC, MSVC, Borland C, Watcom C modifier Le C est un langage de programmation impératif, généraliste, traditionnellement utilisé en programmation système. Inventé au début des années 1970 avec UNIX, C est devenu un des langages les plus utilisés. De nombreux langages plus modernes comme C++, Java et PHP reprennent des aspects de C. Sommaire 1 Caractéristiques générales o 1.1 Qualités et défauts 2 Histoire o 2.1 Normalisations 3 Éléments du langage o 3.1 Sources o 3.2 Syntaxe 3.2.1 Hello world o 3.3 Mots clés o 3.4 Instructions du préprocesseur o 3.5 Types o 3.6 Commentaire o 3.7 Structures de contrôle o 3.8 Comportements ambigus 3.8.1 Comportements laissés au choix de l'implémentation 3.8.2 Comportements indéfinis 4 Bibliothèques logicielles o 4.1 La bibliothèque standard o 4.2 Les bibliothèques externes 5 Des sources à l'exécutable o 5.1 Précompilation o 5.2 Compilation o 5.3 Assemblage o 5.4 Édition de liens o 5.5 Optimiseurs o 5.6 Environnements de développement 6 Exemples o 6.1 Chaînes de caractères o 6.2 Allocation mémoire 7 Références 8 Voir aussi o 8.1 Articles connexes o 8.2 Bibliographie o 8.3 Liens externes Caractéristiques générales C est un langage de programmation impératif et généraliste. C est qualifié de langage de bas niveau dans le sens où chaque instruction du langage est conçue pour pouvoir être compilée en un nombre d'instructions machine assez prévisible en termes d'occupation mémoire et de charge de calcul. Il propose un éventail de types entiers et flottants conçus pour pouvoir correspondre directement aux types supportés par le processeur. Il fait en outre un usage intensif de la notion de pointeur. Il a une notion de type composé, mais ne propose aucune opération qui traite directement des objets de plus haut niveau (fichier informatique, chaîne de caractères, liste…). Ces types plus évolués doivent être traités en manipulant des pointeurs et des types composés. De même, le langage ne propose pas en standard la gestion de la programmation orientée objet, ni de système de gestion d'exceptions. Il existe des fonctions standards pour gérer les entrées-sorties et les chaînes de caractères, mais contrairement à d'autres langages, aucun opérateur spécifique pour améliorer l'ergonomie. Ceci rend aisé le remplacement des fonctions standards par des fonctions spécifiquement conçues pour un programme donné. Ces caractéristiques en font un langage privilégié quand on cherche à maîtriser les ressources utilisées, le langage machine généré par les compilateurs étant relativement prévisible et parfois même optimal sur les machines d'architecture RISC à grand nombre de registres. Ce langage est donc extrêmement utilisé dans des domaines comme la programmation embarquée sur microcontrôleurs, les calculs intensifs, l'écriture de systèmes d'exploitation et tous les modules où la rapidité de traitement est importante. Il constitue une bonne alternative au langage d'assemblage dans ces domaines, avec les avantages d'une syntaxe plus expressive et de la portabilité du code source. Le langage C a été inventé pour écrire le système d'exploitation UNIX, et reste utilisé pour la programmation système. Ainsi le noyau de grands systèmes d'exploitation comme Windows et Linux sont développés en grande partie en C. En contrepartie, la mise au point de programmes en C, surtout s'ils utilisent des structures de données complexes, est plus difficile qu'avec des langages de plus haut niveau. En effet, dans un souci de performance, le langage C impose à l'utilisateur de programmer certains traitements (libération de la mémoire, vérification de la validité des indices sur les tableaux…) qui sont pris en charge automatiquement dans les langages de haut niveau. C étant un langage simple, son compilateur l'est également. Cela se ressent au niveau du temps de développement d'un compilateur C pour une nouvelle architecture de processeur : Kernighan et Ritchie estimaient qu'il pouvait être développé en deux mois car « on s'apercevra que les 80 % du code d'un nouveau compilateur sont identiques à ceux des codes des autres compilateurs existant déjà. »1. Qualités et défauts C'est un des langages les plus utilisés car : il existe depuis le début des années 1970, il est fondé sur un standard ouvert, de nombreux informaticiens le connaissent, des compilateurs et bibliothèques logicielles existent sur la plupart des architectures ; il a influencé de nombreux langages plus récents dont C++, Java et PHP, sa syntaxe en particulier est largement reprise ; il met en œuvre un nombre restreint de concepts, ce qui facilite sa maîtrise et l'écriture de compilateurs simples et rapides ; il ne spécifie pas rigidement le comportement du fichier exécutable produit, ce qui aide à tirer parti des capacités propres à chaque ordinateur ; il permet l'écriture de logiciels qui n'ont besoin d'aucun support à l'exécution (ni bibliothèque logicielle ni machine virtuelle), au comportement prédictible en temps d'exécution comme en consommation de mémoire vive, comme des noyaux de système d'exploitation et des logiciels embarqués. Ses principaux inconvénients sont : la première version du langage (K&R C) offre particulièrement peu de vérifications lors de la compilation, et il n'offre aucune vérification pendant l'exécution, ce qui fait que des erreurs qui pourraient être automatiquement détectées lors du développement ne le sont que plus tard, souvent au prix d'un plantage du logiciel ; il ne facilite pas le développement de concepts informatiques plus modernes comme la programmation orientée objet ou la gestion d'exceptions qui exigent un effort de rigueur supplémentaire de la part du développeur. il est difficile d'écrire des programmes portables car le comportement exact des exécutables dépend de l'ordinateur cible ; le support de l'allocation de mémoire et des chaînes de caractères est minimaliste, ce qui oblige les programmeurs à s'occuper de détails fastidieux et sources de bugs ; il n'y a notamment pas de ramasse-miettes standard ; des bugs communs comme le débordement de tampon constituent une faille de sécurité informatique et peuvent être exploités par des logiciels malveillants si le développeur ne fait pas attention. plusieurs genres d'erreurs ne peuvent être détectées automatiquement qu'à l'aide d'outils supplémentaires et non standardisés, comme lint puis splint. Histoire Kenneth Thompson (à gauche) et Dennis Ritchie (à droite). Le langage C est apparu au cours de l'année 1972 dans les Laboratoires Bell. Il était développé en même temps que UNIX par Dennis Ritchie et Ken Thompson. Ken Thompson avait développé un prédécesseur de C, le langage B, qui est lui-même inspiré de BCPL. Dennis Ritchie a fait évoluer le langage B dans une nouvelle version suffisamment différente pour qu'elle soit appelée C. Par la suite, Brian Kernighan aida à populariser le langage. Il procéda aussi à quelques modifications de dernière minute. En 1978, il fut notamment le principal auteur du livre The C Programming Language décrivant le langage enfin stabilisé ; Ritchie s'était occupé des appendices et des exemples avec Unix. On parle encore de C K&R, K&R C en anglais (pour Kernighan and Ritchie C) lorsqu'on se réfère au langage tel qu'il existait à cette époque. Normalisations Inventé au début des années 1970, le langage a été complètement décrit pour la première fois en 1978 dans le livre The C Programming Language de Brian Kernighan et dennis Ritchie. On appelle généralement C traditionnel ou K&R C cet ancien dialecte du langage. En 1983, l'Institut national américain de normalisation (ANSI) a formé un comité de normalisation du langage qui a abouti en 1989 à l'approbation de la norme dite ANSI C ou C89 (formellement ANSI X3.159-1989). En 1990, cette norme a également été adoptée par l'Organisation internationale de normalisation (C ISO, formellement ISO/CEI 9899:1990). ANSI C est une évolution du C K&R qui reste extrêmement compatible. Elle reprend quelques idées de C++. En 1995, le groupe de travail de l'ISO a publié deux correctif et un amendement à C89. Ces changements assez modestes sont parfois appelés C89 avec amendement 1, ou C952. En 1999, une nouvelle évolution du langage est normalisée par l'ISO : C99 (formellement ISO/CEI 9899:1999). Parmi les ajouts, on notera les tableaux dynamiques, ainsi que des fonctionnalités (types complexes, mot-clef « restrict », directives agissant sur la simplification des instructions arithmétiques) souhaitables pour les calculs numériques intensifs, domaine habituel de FORTRAN. En 2011, l'ISO ratifie une nouvelle version3 du standard : C11, formellement ISO/IEC 9899:2011. Éléments du langage Sources L'usage est de donner l'extension de nom de fichier .c aux fichiers source C. En outre, des fichiers permettant de partager les interfaces, portent le même nom, avec l'extension (suffixe) .h (h pour header en anglais, soit en-tête en français). Chaque fichier .c est compilé séparément. Les rôles des fichiers .c et .h sont répartis ainsi : Les fichiers .c uploads/Litterature/ langage-c 1 .pdf
Documents similaires
-
20
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Nov 29, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.9595MB