Présentation
En anglaisAuteur(s)
-
Christian QUEINNEC : Professeur à l’université Pierre-et-Marie-Curie
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleINTRODUCTION
Le langage C a été défini en 1972 par Denis Ritchie, chercheur des laboratoires Bell, dans le cadre d’un projet qui visait à réécrire le système d’exploitation Unix dans un langage de haut niveau. Le langage C a été fortement influencé par son premier client : Unix, et nombre de ses caractéristiques proviennent des besoins suscités par le développement de ce système. Parmi ces caractéristiques figurent :
-
la compacité d’écriture visant à minimiser la frappe des programmes (ainsi écrit-on {et} pour begin et end). La rapidité de programmation a été préférée à la lisibilité, l’inverse étant requis dans un langage comme Ada ;
-
l’absence de bibliothèque obligatoire d’exécution rejetant la manipulation des entrées /sorties, la gestion de tâches, l’allocation dynamique de mémoire, etc., dans des bibliothèques extérieures, supplémentaires et optionnelles ;
-
la proximité sémantique avec la machine d’exécution privilégiant systématiquement un contrôle fin de celle-ci au détriment de toute abstraction opaque. Citons en particulier un système de types débrayable, l’absence de booléens, l’absence de chaînes de caractères, une grande variété d’entiers de tailles diverses, etc. Cette caractéristique s’accompagne d’un slogan : « Trust the programmer », qui stipule le primat du programmeur sur la machine. En cas d’incompréhension du programme, le compilateur respectera le programme à la lettre plutôt que de le rejeter. C est souvent considéré comme un langage dangereux ou, à tout le moins, « sale » lorsque comparé à d’autres langages de programmation occupant d’autres niches et cherchant à optimiser d’autres critères. La norme ISO de 1990 ainsi que sa révision de 1999 en font un langage de plus en plus sûr. La santé de C montre bien son indéfectible vitalité dans ses niches propres.
C est un « assembleur portable de haut niveau », c’est‐à‐dire un langage de programmation de haut niveau qui permet également une manipulation précise des entités proches des processeurs. Ses caractéristiques auraient pu le réduire à n’être que le langage d’écriture d’Unix mais, le succès d’Unix aidant et comme C est disponible (par construction) sur tout Unix (puisqu’un portage d’Unix sur une machine X passe par l’écriture d’un générateur de code spécifique de C vers[nbsp ]X), C a pu être de plus en plus choisi comme langage d’écriture d’applications générales. C peut être considéré comme un langage normal de programmation avec son lot de singularités dont les plus délicates concernent les références et l’allocation.
C occupe aujourd’hui plusieurs niches dans lesquelles sa survie n’est pas menacée. C peut être utilisé pour écrire des programmes hautement portables ou hautement spécifiques.
DOI (Digital Object Identifier)
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(239 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
1. Utilisations
1.1 Assembleur portable
À la différence d’Ada, C n’est pas un langage inhéremment portable. Toutefois, une expérience trentenaire de portage d’Unix et /ou de tous ses utilitaires (quelques millions de lignes de code) sur quelques centaines de types d’ordinateurs ou de systèmes d’exploitation différents ont permis d’élaborer un sous-ensemble pragmatiquement portable de C.
Ce sous-ensemble, qui correspond au côté « assembleur portable », est utilisé pour écrire des applications ou des bibliothèques destinées à fonctionner sur de nombreuses machines. Citons dans cette catégorie les utilitaires GNU, le système de fenêtrage X Window, les bibliothèques d’accès aux bases de données, le serveur HTTP Apache, etc. Ce sous-ensemble peut également être employé comme cible de compilateur traduisant un langage de très haut niveau en un langage plus simple : C. L’existence de compilateurs C pour quasiment toute machine existante permet aux compilateurs de langages de haut niveau (Eiffel, Scheme (Bigloo), lex, yacc ...) de s’affranchir des problèmes de bas niveau (allocation de registres, gestion des coprocesseurs, optimisations diverses, etc.) et de n’avoir qu’un unique compilateur à maintenir.
L’absence en C de bibliothèque d’exécution a aussi un effet bénéfique sur les applications écrites en C : aucune redevance n’est due ! En contrepartie, ni gestion élaborée de mémoire (GC pour glaneur de cellules), ni possibilité d’introspection à l’exécution ne sont procurées par défaut.
HAUT DE PAGE1.2 Assembleur de haut niveau
Une deuxième niche, d’intention assez opposée, est l’écriture de programmes spécifiques non portables. L’aspect « assembleur de haut niveau » est alors privilégié, permettant à la fois un contrôle fin de la machine (adresses fixées, instructions particulières, représentations en mémoire précises) et l’emploi de structures de contrôle de haut niveau (boucle while, fonctions), de structures de données de haut niveau (tableau, enregistrement) et d’un système de types assurant une certaine cohérence (lorsque bien employé). Cette caractéristique de C est mise en œuvre pour l’écriture de pilotes (drivers...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(239 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Utilisations
BIBLIOGRAPHIE
-
(1) - KERNIGHAN (B.W.), RITCHIE (D.M.) - The C Programming Language. - Prentice-Hall (1978).
-
(2) - HARBISON (S.P.), STEELE (G.L.) - C : A Reference Manual. - Prentice-Hall (1991).
-
(3) - BANAHAN (M.) - The C Book, Featuring the draft ANSI C Standard. - Addison Wesley (1988).
-
(4) - BRAQUELAIRE (J.P.) - Méthodologie de la programmation en langage C, bibliothèque standard - API POSIX. - 3e éd., Masson (1998).
-
(5) - DELANNOY (C.) - La référence de C norme ANSI/ISO. - Eyrolles (1998).
-
(6) - DARNELL (P.A.), MARGOLIS (P.E.) - C, a Software Engineering Approach. - 3e éd., Springer-Verlag (1996)
-
...
ANNEXES
Site historique http://www.lysator.liu.se/c/index.html
EiC : The embeddable/extensible interactive, pointer-safe, bytecode C interpreter/compiler
Foire aux questions http://www.eskimo.com/~scs/C-faq/top.html
Free Software Foundation FSF http://www.fsf.org
Licence GPL (Gnu Public License) http://www.gnu.org/copyleft/gpl.html
Guides de style pour C http://www.cs.umd.edu/~nelson/classes/resources/cstyleguide/
Outil d’analyse statique de programmes C http://lclint.cs.virginia.edu/
Carte de référence de C http://www.refcards.com/
Dictionnaire du jargon http://www.tuxedo.org/~esr/jargon/
HAUT DE PAGE
Groupe de normalisation ISO C http://www.dkuug.dk/JTC1/SC22/WG14/
ISO/CEI 9899 : 1990 Langage de programmation - C
ISO/CEI 9899 : 1999 Langage de programmation - C
HAUT DE PAGECet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(239 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive