Sommaire: Cours les nouveautés du C99
Historique
I – Introduction
II – PréprocesseurII-A – La macro STDC_VERSION
II-B – Macros à nombre variable d’arguments
II-C – Les commentaires mono-ligne
II-D – La directive #line
II-E – La directive #pragma
III – SyntaxeIII-A – Les nouveaux mots réservés
III-B – Séquences d’échappement à deux caractères
III-C – Mélange déclaration/code
III-D – Initialisation des membres d’une structure
IV – Sémantique
IV-A – Les fonctions en ligne
IV-B – long longIV-C – func IV-D – Type de retour implicite
IV-E – Les pointeurs restreints
IV-F – Les tableaux de taille variable
IV-G – Type de tableau incomplet
V – La bibliothèque standard
V-A – Les nouveaux fichiers d’en-tête
V-B – Les types entiers étendus
V-C – Les caractères étendus
V-D – va_copy
V-E – Le type booléen
V-F – Les nombres complexes
V-G – Les nombres à virgules flottantes
V-G-1 – Dépassement de capacité de la valeur de retour
V-G-2 – Le controle des arrondis
V-G-3 – Les exceptions
V-G-4 – Manipulation de l’environnement
VI – Conclusion
VII – Références
VIII – Remerciements
Extrait du cours les nouveautés du C99
Historique
4 Novembre 2006
• Clarification de la signification des pragma
• Précision sur l’environnement en virgule flottante
• Ajout des nouveaux fichiers d’en-tête
• Ajout de références
I – Introduction
A l’heure actuelle, deux normes cohabitent : il y a celle publiée en 1989 par l’ANSI (1) , reprise en 1990 par l’ISO (2) connue respectivement sous le nom de C89 et C90 (ce sont les mêmes) et une seconde norme, qui regroupe les différents drafts apparues depuis la dernière norme, publiée en 1999 par ISO connue sous le nom de C99 (et C2k pour la version ANSI). Cette dernière a pour but de minimiser les incompatibilités entre le C et le C++ (sans pour autant en faire un seul et même langage). Voici donc la liste des nouveautés et des modifications apportées par la norme C99 par rapport au C90.
II – Préprocesseur
II-A – La macro __STDC_VERSION__
Cette macro permet de connaître la norme utilisée :
• En C89 elle n’est pas définie
• En C94 elle vaut 199409L
• Et maintenant, en C99, 199901L.
II-B – Macros à nombre variable d’arguments
Cette fonctionnalité permet de définir des macros dont le nombre des arguments peut être différent d’un appel à l’autre.
La notation utilisée est la même que pour les fonctions (‘…’) et la liste est récupérée grâce à la macro __VA_ARGS__ :
#define print_error(s, …) fprintf (stderr, (s), __VA_ARGS__)
II-C – Les commentaires mono-ligne
Les commentaires « à la C++ », c’est à dire commençant par // et se terminant à la fin de la ligne viennent s’ajouter aux commentaires classiques (/* */).
II-D – La directive #line
Cette directive du préproceseur permet de modifier le numéro de la ligne courante (et optionnellement le nom du fichier). La valeur utilisée était limitée à 2
II-E – La directive #pragma
15-1 en C90 et passe maintenant à 231-1.
La directive #pragma permet de contrôler le comportement du compilateur. La norme C99 définie trois pragma standards :
• FP_CONTRACT : optimisation des expressions flottantes
• FENV_ACCESS : notre programme accède aux paramètres du FPU (Floating Point Unit ou unité de calcul flottant), ceci se fait à l’aide des fonctions déclarées dans fenv.h. Le compilateur doit donc respecter la norme pour les opérations sur les nombres flottant
• CX_LIMITED_RANGE : dans le cas d’opérations sûres avec les nombres complexes (c’est à dire sans risque de débordement de capacités), vous pouvez le signaler afin d’accélérer le traitement en activant ce pragma.
III – Syntaxe
III-A – Les nouveaux mots réservés
Le C99 ajoute cinq mots réservés au langage :
• restrict
• inline
• _Complex
• _Imaginary
• _Bool
III-B – Séquences d’échappement à deux caractères
Les séquences d’échappement à deux caractères permettent de remplacer certains caractères spéciaux qui peuvent être absent du clavier (comme les séquences d’échappement à trois caractères). Avant tout traitement, les lexèmes <:, :>, <%, %>, %: et %:%: sont respectivement remplacés par [, ], {, }, # et ##.
III-C – Mélange déclaration/code
En C90, les déclarations doivent être faites au début d’un bloc, alors qu’en C99 il est tout à fait possible d’écrire :
int main (void)
{
printf (« Debut du code\n »);
int i = 10;
printf (« i vaut %d\n », i);
return 0;
}
………
Apprenez à programmer cours sur les nouveautés du C99 (360 Ko) (Cours PDF)