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:
_Alignas
, Opérateur _Alignof
, Fonction aligned_alloc
, Fichier d'en-tête <stdalign.h>
)_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).
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
).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
.struct T { int tag; union { float x; int n; }; };
.#if
Et #error
, Lorsque les types sont compris par le traducteur."…x"
) Pour open
. Cela se comporte comme O_CREAT|O_EXCL
Dans POSIX
, qui est couramment utilisé pour verrouiller les fichiers.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.real + imaginary*I
Peut ne pas donner la valeur attendue si imaginary
est infini ou NaN
).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 fonctiongets
(<stdio.h>
)
- a ajouté lealigned_alloc
,at_quick_exit
etquick_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é