Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires
Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.
|
|
Auteur | Message |
---|---|
Administrateur
|
Le C est un langage défini par une norme ISO. Les normes ISO sont assez chers (du moins pour les particuliers), aux environs de 164 € (198 CHF).
Il existe d’autres sources, certaines identiques et nettement moins chers, d’autres non‑payantes mais moyennement fiables. Il existe des formalisations du C ou de sous‑ensembles du C, dont certaines sont en cours. Le standard est « millésimé » : ISO/IEC 9899:1999 n’est pas ISO/IEC 9899:2011. Le site de l’ISO ne propose toujours que la dernière version. Brouillons du standardSources et liste de sources pour des brouillons de la norme ou des commentaires sur celle‑ci, non‑payants, mais non‑fiables. À ne pas utiliser pour concevoir des outils devant interpréter ou non‑trivialement manipuler des sources C ! (excepté pour un usage privé qui n’engage que soi) Standards officiels chez d’autres éditeursÉditeurs proposant la norme, comme texte identique à celui de l’ISO, pour bien moins cher. Ces sources sont fiables, modulo le « millésime » sur lequel il ne faut pas se tromper et choisir en connaissance.
Formalisation de la sémantiqueLes formalisations, ne sont pas des standards officiels, mais formalisent mathématiquement un sous‑ensemble.
Anciens standardsPlus en arrière dans le temps, des brouillons des précédentes version du C. À noter que beaucoup d’implémentation ne supporte finalement que d’ancienne version du C, et que les anciennes versions du standards sont donc toujours d’actualité. Comme elle ne sont plus publiées par l’ISO, il n’existe pas d’autres sources que ces brouillons. Malgré que les mêmes mise en garde que précédemment s’applique, elles sont à peser différemment.
Autres standards en rapport
À propos de POSIX (les références à OpenGroup plus haut), voir : UNIX, POSIX et SUS : références et à‑propos. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
|
|
Administrateur
|
Pour les curieux(ses), il existe encore un descendant directe d’un des tout premiers compilateurs C, de la fin des années 1970, nommé PCC, pour Portable C Compiler, actuellement propriété de la société Caldera International : PCC (pcc.ludd.ltu.se). Ne pas oublier de bien lire les licences : pcc / licenses.
Je n’ai pas vérifié sa conformité ou pas au standard du C actuel ou à une version précédente du standard. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Comme le standard du C a des lacunes sémantiques, un ajout au sujet : Defining the Undefinedness of C (illinois.edu).
C’est un PDF daté de 2012 et qui ne fait pas partie du standard. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Pas un standard, mais une série de recommandations, avec le pour et le contre quand la recommandation est discutable. Dans l’ensemble, le document invite à ne pas garder des habitudes de la préhistoire, souligne qu’on est en 2016 et que le C99 existe donc depuis dix‑sept ans, soit presque vingt.
How to C in 2016 (matt.sh) Je suis d’accord avec tout, excepté la partie intutlée “Parameter Types” qui conseil de substituer un pointeur non‑typé à un pointeur typé . Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Un document du W3C sur la classique technique de reformuler en C, certaines des constructions basiques mais très courantes du C++ (faire du C++ en C) : C++ in C (w3.org).
Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Pas une partie du standard du C, mais fortement lié, une partie de POSIX a propos de la configuration des sources C, les macros qui permettent de tester quel version de POSIX fourni l’environnement dans lequel un source C est compilé : The compilation environment (opengroup.org).
Depuis l’index avec les iframes (*), vous pouvez retrouver cette page dans la section “ System Interfaces ”. (*) POSIX.1-2017 (opengroup.org), dont le lien est aussi donné dans le sujet UNIX, POSIX et SUS : références et à‑propos. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Ce n’est pas un standard du C, mais une librairie pour les coroutines en C, une construction importante et inévitable dans certains cas épineux : libaco (github.com/hnes). Ce n’est pas la seule librairie du genre, je la mentionne parce qu’elle me semble (subjectif) la mieux conçue des quelques unes existantes.
Les coroutines sont une technique d’inversion de contrôle, dont des cas particuliers sont les générateurs. Elles sont fréquemment et à juste titre, comparées à des threads légers ou à des cas particuliers de continuations. Comme elle permet d’implémenter les coroutines asymétriques, la librairie mentionnée plus haut est en fait plus pour implémenter des générateurs que des coroutines au sens général. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Un tableau de comparaison de quelques implémentations de la librairie standard du C (c’est à dire, incluant les fonctions POSIX, pas seulement celles de la définition du C ISO/ANSI) : Comparison of C/POSIX standard library implementations for Linux (etalabs.net).
Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
La librairie C POSIX sur Windows, s’appel UCRT, pour Universal C Runtime. Elle est disponibles pour Windows 7 et versions ultérieures, à partir de mise à jours. Elle a été introduite avec Windows 10, mais a été rendue disponible pour les versions antérieures. Elle fait partie des librairies système (sous condition de mise à jours pour les Windows précédents Windows 10), il n’est donc pas nécessaire d’ajouter une ou des DLL dans le répertoire de l’application.
L’UCRT a quelques divergences d’avec POSIX, mais je ne suis pas parvenu à en trouver la liste. Peut‑être le SDK documente‑t‑il les différences. Au sujet de l’UCRT, voir : Le second lien est pour lier à l’UCRT avec MinGW, dans le cas de la compilation d’applications Windows depuis Linux. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Administrateur
|
Le standard du C à utiliser, n’est pas nécessairement le plus récent.
Le C le plus portable même encore actuellement, est le C89 ou le C90. Le compilateur C de Microsoft ne supporte que quelques éléments du C99, et je crois, aucun du C11. Des compilateurs prétendant supporter le C99, ne le supportent pas toujours entièrement. Cependant, CLang (le compilateur C de LLVM) supporte tout C99. Les ajouts aux C99 depuis le C89 et C90, ne sont pas d’une importance capitale, surtout pour du C généré automatiquement, non‑pas écrit à la main. Les types de données 64 bits peuvent être supportés en C90, en utilisant int64_t et uint64_t définis dans stdint.h, mais il faut savoir que stdint.h n’est pas standard en C90, seulement en C99, il n’est pas garanti qu’un compilateur C90 dispose de stdint.h. Le C89 est aussi connu sous le nom de C90, ou plutôt le C90 est quasiment identique au C89. Ils ne se distinguent qu’en deux points. Le C89 est un standard ANSI, le C90 est un standard ISO. Le C90 défini une macro qui n’est pas définie par le C89. Pour différencier le C89 et le C90, il est possible de tester l’existence de la macro __STDC_VERSION__ qui n’existe qu’à partir du C90, le C89 ne définissant que la macro __STDC__. Attention : avec certains compilateurs, les macros peuvent être définies et égales à zéro ; il faut tester l’existence de la macro et tester qu’elle s’évalue à vrai. Ceci dit, il serait pédant de tester ces macros de nos jours, comme tous les compilateurs supportent cette version du standard au minimum, depuis longtemps. Le standard du C90 peut être consulté ici : ANSI/IS0 9899-1990 (pdf-archive.com) [PDF]. Le C89 n’est plus disponible dans le catalogue ANSI, de même que le C90 n’est pas disponible dans la catalogue ISO. Ceci ne signifie pas du tout que cette version du standard est obsolète, elle est encore la plus couramment utilisée, la plus portable. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
|