FAQ CConsultez toutes les FAQ

Nombre d'auteurs : 30, nombre de questions : 181, dernière mise à jour : 16 février 2017  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .

Sur ce, je vous souhaite une bonne lecture.


SommaireInformation généraleLes nouveautés de C11 par rapport à C99 (5)
précédent sommaire suivant
 

C11 est une version de la norme du langage C, publiée en 2011 (soit douze ans après le C99) par l’ISO (International Organization for Standardization) et l’IEC (International Electrotechnical Commission). C’est le nom définitif pour le C1X. Elle succède au C99.

Mis à jour le 16 février 2017 LittleWhite Malick

Comme beaucoup de normes, elle n'est souvent que partiellement respectée par les implémentations du langage, qu'il s'agisse des compilateurs ou des libc. La seule implémentation complète étant offerte par Pelles C.

Mis à jour le 16 février 2017 LittleWhite Malick

C11 intègre d’importantes nouveautés parmi lesquelles nous pouvons citer :

  • la possibilité de spécifier un alignement mémoire grâce au spécificateur _Alignas, à l’opérateur _Alignof et à la fonction aligned_alloc. Ceux-ci sont disponibles au travers du fichier d'en-tête <stdalign.h> :
    • le spécificateur d'objet _Alignas (macro alignas via stdalign.h) : spécifie l'alignement mémoire d'une variable ou donnée membre,
    • l'opérateur constant _Alignof (macro alignof via stdalign.h) : renvoie l’alignement mémoire d'un type passé en paramètre,
    • la fonction aligned_alloc : (via stdlib.h) : alloue un bloc mémoire, aligné à une valeur spécifiée ;
  • le spécificateur de fonction _Noreturn (macro noreturn via stdnoreturn.h) : spécifie qu'une fonction ne retourne pas le contrôle à la fonction appelante par retour implicite ou explicite, mais termine par un appel à une autre fonction noreturn, par exemple exit(), abort() ou longjmp() ;
  • le mot-clé sélecteur _Generic remplace l'expression en fonction du type de l'argument. Par exemple, la macro cbrt(x) ci-dessous devient cbrtl(x), cbrt(x) ou cbrtf(x) selon le type de l'expression x.
    Code c : Sélectionner tout
    1
    2
    3
    #define cbrt(x) _Generic((x), long double: cbrtl, \ 
                                  default: cbrt, \ 
                                  float: cbrtf)(x)
  • une nouvelle interface pour la prise en charge portable de la programmation concurrentielle, semblable à l'API des POSIX threads, via threads.h. threads.h embarque des fonctions pour la création et la gestion de threads, de mutex, de variables conditionnelles ;
  • l’introduction des qualificatifs _Atomic et <stdatomic.h> pour la gestion des accès ininterruptibles aux objets ;
  • l’ajout du support des caractères et chaînes de caractères littérales au format Unicode. Le support est basé sur le rapport technique du +C Unicode ISO/IEC TR 19769:2004. Il devient maintenant possible d’encoder les chaînes UTF-16/UTF32 grâce aux types char16_t et char32_t. Des fonctions de conversion ont également été ajoutées dans le fichier d’en-tête <uchar.h> et les préfixes de littérals u et U correspondants. Le préfixe u8 est aussi intégré pour les chaînes littérals UTF-8 ;
  • la suppression de la fonction gets déjà dépréciée dans C99. Cette dernière est maintenant remplacée par son alternative gets_s plus fiable ;
  • l’ajout de macros permettant d’obtenir :
    • les caractéristiques des types pour les nombres à virgule flottante concernant les subnormal floating point numbers,
    • et le nombre de chiffres décimaux que le type peut stocker avec sûreté ;
  • l’intégration de structures et unions anonymes. Cela est pratique lorsque les unions et les structures sont imbriquées, par exemple dans
    Code c : Sélectionner tout
    1
    2
    3
    struct T { int tag; union { float x; int n; }; }; 
    T t = { .tag = 1, .x = .25f }; 
    t.n = 42;
     ;
  • le mot-clef _Static_assert (macro static_assert via assert.h) : implémente une assertion statique (évaluée à la compilation) en effectuant un contrôle de la véridicité de l'expression constante passée en argument ;
  • l’intégration du mode exclusif de création et d’ouverture d’un fichier en utilisant la fonction fopen (suffixe "x"). Ce fichier est l’équivalent du O_CREAT|O_EXCL dans POSIX, deux fonctions couramment utilisées dans les fichiers-verrous ;
  • l’intégration de la fonction quick_exit qui permet de terminer un programme lorsque la fonction exit échoue. Cela permet de faire une libération minimale des ressources ;
  • l’intégration de macros favorisant la construction de nombres complexes (partiellement, car réel + imaginaire*I ne peut pas contenir la valeur voulue si imaginaire est infinie ou NaN).


Source : open.std.org

Mis à jour le 16 février 2017 LittleWhite Malick

L’alignement mémoire fait référence au respect de contraintes d’emplacement lorsque le système doit réserver de la mémoire pour le programme.

Mis à jour le 16 février 2017 LittleWhite Malick

Le multithreading fait référence à l’utilisation de plusieurs flux d’exécution d’un processeur afin de paralléliser des traitements.

Mis à jour le 16 février 2017 LittleWhite Malick

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique C