web-dev-qa-db-fra.com

différence entre c99 et c11

J'apprends c, actuellement. Le livre J'ai lu est basé sur C99. Je souhaite mettre à jour mes connaissances en C11 après avoir terminé ce livre, ou changer de ressource s'il y a une différence majeure. Ainsi, ce que je demande, c'est une explication ou une ressource pour mettre à jour mes connaissances. J'ai seulement trouvé cette source . Néanmoins, il ne semble pas englober les informations dont j'ai besoin ou non concises.

Merci d'avance. P.S: Je veux apprendre le C11 car je pense que c'est la norme la plus répandue actuellement. Sinon, veuillez m'en informer.

Bon aperçu de la norme C11:

La norme comprend plusieurs modifications du langage C99 et des spécifications de bibliothèque, telles que:

  • Spécification d'alignement (spécificateur _Alignas, Opérateur _Alignof, Fonction aligned_alloc, Fichier d'en-tête <stdalign.h>)
  • Le spécificateur de fonction _Noreturn Et le fichier d'en-tête <stdnoreturn.h>
  • Expressions génériques de type à l'aide du mot clé _Generic. Par exemple, la macro suivante cbrt(x) se traduit par cbrtl(x), cbrt(x) ou cbrtf(x) selon le type de x:

    #define cbrt(x) _Generic((x), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(x)
    
  • Prise en charge multi-threading (spécificateur de classe de stockage _Thread_local, En-tête <threads.h> Comprenant les fonctions de création/gestion de threads, mutex, variable de condition et fonctionnalité de stockage spécifique au thread, ainsi que le _Atomic tapez le qualificatif et <stdatomic.h> pour un accès aux objets sans interruption).

  • Prise en charge améliorée d'Unicode basée sur le rapport technique C Unicode ISO/CEI TR 19769: 2004 (types char16_t Et char32_t Pour le stockage des données encodées UTF-16/UTF-32, Y compris les fonctions de conversion dans <uchar.h> Et les préfixes de littéraux de chaîne u et U correspondants, ainsi que le préfixe u8 pour les littéraux codés UTF-8).
  • Suppression de la fonction gets, déconseillée dans la précédente révision de la norme du langage C, ISO/IEC 9899: 1999/Cor.3: 2007 (E), au profit d'une nouvelle alternative sûre, gets_s .
  • Interfaces de vérification des limites (annexe K).
  • Caractéristiques d'analysabilité (Annexe L).
  • Plus de macros pour interroger les caractéristiques des types à virgule flottante, concernant les nombres à virgule flottante subnormaux et le nombre de chiffres décimaux que le type est capable de stocker.
  • Structures et unions anonymes, utiles lorsque les unions et les structures sont imbriquées, par ex. dans struct T { int tag; union { float x; int n; }; };.
  • Assertions statiques, qui sont évaluées lors de la traduction à une phase ultérieure à #if Et #error, Lorsque les types sont compris par le traducteur.
  • Un mode exclusif de création et d'ouverture (suffixe "…x") Pour open. Cela se comporte comme O_CREAT|O_EXCL Dans POSIX, qui est couramment utilisé pour verrouiller les fichiers.
  • La fonction quick_exit Est une troisième façon de terminer un programme, destinée à effectuer au moins une désinitialisation minimale si la terminaison avec exit échoue.
  • Macros pour la construction de valeurs complexes (en partie parce que real + imaginary*I Peut ne pas donner la valeur attendue si imaginary est infini ou NaN).
24
Evgeny Karkan

Selon la norme C 2011 elle-même, voici les principaux changements par rapport à C99:

Avant-propos
...
6 Cette troisième édition annule et remplace la deuxième édition, ISO/IEC 9899: 1999, telle que corrigée par ISO/IEC 9899: 1999/Cor 1: 2001, ISO/IEC 9899: 1999/Cor 2: 2004, et ISO/IEC 9899: 1999/Cor 3: 2007. Les principaux changements par rapport à l'édition précédente incluent:

- fonctionnalités conditionnelles (facultatives) (y compris certaines qui étaient auparavant obligatoires)

- prise en charge de plusieurs threads d'exécution, y compris un modèle de séquencement de mémoire amélioré, des objets atomiques et un stockage local des threads (<stdatomic.h> et <threads.h>)

- macros caractéristiques à virgule flottante supplémentaires (<float.h>)

- interrogation et spécification de l'alignement des objets (<stdalign.h>, <stdlib.h>)

- Caractères et chaînes Unicode (<uchar.h>) (initialement spécifié dans ISO/IEC TR 19769: 2004)

- expressions génériques de type

- assertions statiques

- structures anonymes et syndicats

- fonctions sans retour

- macros pour créer des nombres complexes (<complex.h>)

- prise en charge de l'ouverture de fichiers pour un accès exclusif

- a supprimé la fonction gets (<stdio.h>)

- a ajouté le aligned_alloc, at_quick_exit et quick_exit fonctions (<stdlib.h>)

- prise en charge (conditionnelle) des interfaces de vérification des limites (initialement spécifiées dans l'ISO/CEI TR 24731−1: 2007)

- prise en charge (conditionnelle) de l'analysabilité
6
John Bode