Web Analytics
Privacy Policy Cookie Policy Terms and Conditions Bibliothèque standard du C - Wikipédia

Bibliothèque standard du C

Un article de Wikipédia, l'encyclopédie libre.

Vous avez de nouveaux messages (diff ?).

La bibliothèque standard du C est une collection maintenant normalisée d'en-têtes et de routines de bibliothèque utilisées pour implémenter des opérations courantes, telles que les entrées/sorties ou la gestion des chaînes de caractères, dans le langage C. Au contraire d'autres langages comme le Pascal et le PL/I, C n'inclut pas de mots-clés incorporés au départ pour ces tâches, donc presque tous les programmes écrits en C ont besoin de la bibliothèque standard pour fonctionner, ne serait-ce que pour afficher un résultat.

Sommaire

[modifier] Architecture

Le nom et la signature de chaque fonction sont décrits dans un en-tête qui est inclut par le programme, mais l'implémentation réelle des fonctions est séparée dans une bibliothèque logicielle, qui ne sera rassemblée avec le reste du programme qu'au moment de l'édition de liens. Le nom et l'espace de noms des en-têtes sont devenus communs. Le plus souvent, chaque en-tête constitue un fichier séparé, mais l'organisation des implémentations reste diverse. La bibliothèque standard était initialement fournie avec le compilateur, mais aujourd'hui elle fait souvent partie du système d'exploitation. Par exemple, glibc est fournie avec Linux et généralement utilisée avec GCC. Comme les compilateurs C offrent souvent plus de fonctionnalités que celles spécifiées par les normes C ISO ou POSIX, une bibliothèque standard fournie avec un compilateur spécifique est peu compatible avec les bibliothèques standards des autres compilateurs.

L'expérience a montré que la plus grande partie de la bibliothèque standard C a été bien conçue. Quelques parties avec le recul apparaissent cependant comme des erreurs. La fonction de lecture de ligne gets() et l'utilisation de scanf() pour lire des chaînes en entrée sont la source de beaucoup de débordements de tampon (buffer overflows), et la plupart des guides de programmation recommandent d'en éviter l'usage. Une autre vieillerie est strtok(), une fonction concue comme un analyseur lexical primitif mais qui est assez « fragile » et difficile à utiliser.

[modifier] Histoire

Unix et le langage de programmation C ont été créés par les laboratoires AT&T et Bell (AT&T's Bell Laboratories) à la fin des années 1960 et au début des années 1970. Le langage C primitif ne fournissait pas de fonctionnalités incorporées comme les opérations d'entrées/sorties (au contraire des langages traditionnels comme Pascal et Fortran). Avec le temps, les communautés d'utilisateurs du C ont partagé des idées et des implémentations de ce que nous appelons maintenant la bibliothèque standard du C pour fournir ces fonctionnalités. Beaucoup de ces idées ont été incorporées dans la définition normalisée du langage de programmation C.

Pendant la décennie 1970, le C est devenu populaire. Beaucoup d'universités et d'organisations ont créé leurs propres variations de ce langage pour leurs propre projets. Dans les années 1980 des problèmes de compatibilité entre les différentes implémentations du C sont apparus.

[modifier] Normes ANSI et ISO

En 1983 l'institut national américain des standards (American National Standards Institute (ANSI)) a formé un comité pour établir une spécification normalisée du C, connue sous le nom de « C ANSI ». Ce travail culmina avec la création de la norme C89 en 1989. Une partie de la norme résultante était un ensemble de fonctions de bibliothèque appelé bibliothèque standard C ANSI (ANSI C standard library). Cette norme est devenue Norme internationale en 1990, et est aussi connue comme C ISO (ISO C).

Des révisions ultérieures de la norme C ISO ont ajouté de nouvelles fonctions et de nouveaux en-têtes à la bibliothèque. Le support de ces extensions varie selon les implémentations. Les en-têtes iso646.h, wchar.h, et wctype.h ont été ajoutés avec l'amendement normatif 1 (Normative Amendment 1), abrégé ci-dessous par Amd.1, qui constitue un ajout à la norme C ratifié en 1995. Les en-têtes complex.h, fenv.h, inttypes.h, stdbool.h, stdint.h, et tgmath.h ont été ajoutées avec le C99, une révision de la norme C publiée en 1999.

La bibliothèque standard C ISO consiste en 24 en-tête qui peuvent être inclus dans un projet de programmeur avec une simple directive. Chaque en-tête contient des déclarations de fonctions, des définitions de types et de macros. Le contenu de ces en-têtes est décrit ci-dessous.

[modifier] Extensions

En comparaison avec d'autres langages (par exemple Java), la bibliothèque standard C de la norme ISO est minuscule. Elle fournit un jeu élémentaire de fonctions mathématiques, de manipulation de chaînes, de conversion de types, et d'entrée/sortie maniant les fichiers et les terminaux. Elle n'inclut pas de base standard de « types de conteneurs » comme le fait la Bibliothèque de Modèles Standard C++ (Standard Template Library) du langage C++). Elle laisse de côté les environnements graphiques (Graphical User Interface, GUI), les outils réseau, les fonctions de synchronisation entre tâches, et la profusion d'autres fonctionnalités que Java fournit en standard. L'avantage principal d'une petite bibliothèque standard est qu'il est beaucoup plus facile de fournir un environnement fonctionnel pour le C ISO que pour les autres langages, et le port d'applications en langage C vers de nouvelles plateformes est donc relativement rapide.

Beaucoup d'autres bibliothèques ont été écrites pour développer des fonctionnalités équivalentes à celles fournies par d'autres langages dans leur bibliothèque standard. Par exemple, le projet d'environnement de bureau GNOME a développé la Boîte à Outils GIMP (GIMP ToolKit, GTK) et la glib, une bibliothèque qui contient des conteneurs de structures de données, et il y a beaucoup d'autres exemples biens connus. De cette variété de bibliothèques disponibles, certaines boîtes à outils ont montré à travers le temps des capacités supérieures. L'inconvénient majeur est qu'elles ne fonctionnent souvent pas particulièrement bien ensemble, les programmeurs sont souvent obligés à jongler avec plusieurs bibliothèques différentes, et certaines fonctionnalités peuvent être présentes sous des formes différentes sous chaque plateforme particulière, parfois même au sein d'un même logiciel important.

[modifier] Les en-têtes de la bibliothèque C ISO

<assert.h> : Contient la macro assert(), utilisée pour aider à détecter des incohérences de données et d'autres types de bogues dans les versions de débogage d'un programme.

<complex.h> : Pour manipuler les nombres complexes (introduit par C99).

<ctype.h> : Fonctions utilisées pour classifier rapidement les caractères, ou pour convertir entre majuscules et minuscules de manière indépendante du système de codage des caractères) (character set) utilisé (ASCII chez les Anglos-saxons, ISO 8859-1 le plus souvent pour francophones, mais des implémentations utilisant EBCDIC sont aussi connues).

<errno.h> : Ensemble (ou le plus souvent sous-ensemble) des codes d'erreurs renvoyés par les fonctions de la bibliothèque standard au travers de la variable errno.

<fenv.h> : Pour contrôler l'environnement en virgule flottante (floating-point) (introduit par C99).

<float.h> : Contient des constantes qui spécifient les propriétés des nombres en virgule flottante qui dépendent de l'implémentation, telles que la différence minimale entre deux nombres en virgule flottante différents (xxx_EPSILON), le nombre maximum de chiffres de précision (xxx_DIG) et l'intervalle des nombres pouvant être représentés (xxx_MIN, xxx_MAX).

<inttypes.h> : Pour des conversions précises entre types entiers (introduit par C99).

<iso646.h> : Pour programmer avec le jeu de caractères ISO 646 (introduit par Amd.1).

<limits.h> : Contient des constantes qui spécifient les propriétés des types entiers qui dépendent de l'implémentation, comme les intervalles des nombres pouvant être représentés (xxx_MIN, xxx_MAX).

<locale.h> : Pour s'adapter aux différentes conventions culturelles.

<math.h> : Pour calculer des fonctions mathématiques courantes. C99 a ajouté de nombreuses fonctions mathématiques, en particulier pour converger avec la norme CEI 559 dite aussi IEEE 754.

<setjmp.h> : Pour exécuter des instructions goto non locales (sortes d'exceptions).

<signal.h> : Pour contrôler les signaux (conditions exceptionnelles demandant un traitement immédiat, par exemple signal de l'utilisateur).

<stdarg.h> : Pour créer des fonctions avec un nombre variable d'arguments.

<stdbool.h> : Pour avoir une sorte de type booléen (introduit par C99).

<stdint.h> : Définit divers types d'entiers, c'est un sous-ensemble de <inttypes.h> (introduit par C99).

<stddef.h> : Définit plusieurs types et macros utiles.

<stdio.h> : Fournit les capacités centrales d'entrée/sortie du langage C. Ce fichier inclut la vénérable fonction printf().

<stdlib.h> : Pour exécuter diverses opérations dont la conversion, la génération de nombres pseudo-aléatoires, l'allocation de mémoire, le contrôle de processus, la gestion de l'environnement et des signaux, la recherche et le tri.

<string.h> : Pour manipuler les chaînes de caractères (celle qui sont gérées...)

<tgmath.h> : Pour des opérations mathématiques sur des types génériques (introduit par C99).

<time.h> : Pour convertir entre différents formats de date et d'heure.

<wchar.h> : Pour manipuler les caractères larges (wide char), nécessaire pour supporter un grand nombre de langues et singulièrement Unicode (introduit par Amd.1).

<wctype.h> : Pour classifier les caractères larges (introduit par Amd.1).

[modifier] La bibliothèque standard en C++

Voir l'article détaillé : Bibliothèque standard du C++

Le langage de programmation C++ reprend les fonctionnalités de la bibliothèque standard C ISO, mais il y fait plusieurs modifications, comme transformer les noms des en-têtes de xxx.h en cxxx (cependant, les noms dans le style C sont toujours disponibles, bien que périmés), et placer tous les identificateurs dans l'espace de noms (namespace) std.

[modifier] Lien externe

Autres langues
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu