Syntaxe et sémantique du C99

Historique
I – Introduction
II – Préprocesseur
II-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 – Syntaxe
III-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 long
IV-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

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.

Préprocesseur

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.

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__)

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 (/* */).

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-1 en C90 et passe maintenant à 2

La directive #pragma
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.
Chacune de ces fonctionnalités peuvent être activée (ON), désactivée (OFF) ou remis à son état par défaut (DEFAULT). Par exemple, voici comment activer les optimisations des expressions flottantes :
#pragma STDC FP_CONTRACT ON
Chaque compilateur propose ces propres directives pragma. Si le compilateur rencontre une directive inconnue, la norme prévoie que celle-ci soit ignorée, cependant il est déconseillé d’utiliser des directives non standard car selon les compilateurs leur rôle peut être différent.
A la place de la directive #pragma, il est possible d’utiliser l’opérateur unaire _Pragma.

Syntaxe

Les nouveaux mots réservés
Le C99 ajoute cinq mots réservés au langage :
• restrict
• inline
• _Complex
• _Imaginary
• _Bool

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 ##.

…..

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Les nouveautés du C99 (314 Ko) (Cours PDF)
Les nouveautés du C99

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *