Les espaces de noms
Le compilateur a installé les « espaces de noms » pour distinguer les identificateurs utilisés pour différents genres d'éléments.Les noms figurant dans chaque espace de noms doivent être uniques pour éviter les conflits, mais un nom identique peuvent apparaître dans plusieurs espaces de noms.Cela signifie que vous pouvez utiliser le même identificateur pour les éléments moins deux différents, à condition que les éléments soient dans différents espaces de noms.Le compilateur peut résoudre les références selon le contexte syntaxique de l'identificateur dans le programme.
[!REMARQUE]
Ne confondez pas la notion limitée C d'un espace de noms avec la configuration du « espacenoms » C++.Consultez les espaces de noms dans le Guide de référence du langage C++ pour plus d'informations.
Cette liste décrit les espaces de noms utilisés dans C.
noms d'instruction
L'instruction nomme nommés font partie d'instructions.Les définitions des noms d'instruction sont toujours suivi de deux-points mais ne font pas partie de noms d' événement .Les utilisations des noms d'instruction toujours suivent immédiatement le mot clé goto.Les noms d'instruction ne doivent pas être distincts d'autres noms ou des noms d'étiquettes dans d'autres fonctions.Structure, union, et indicateurs d'énumération
Ces balises font partie de structure, union, et des spécificateurs de type énumération et, s'il est présent, suivent toujours immédiatement les mots réservés struct, union, ou enum.Les noms de balises doivent être distincts d'une autre structure, une énumération, les balises ou des unions avec la même visibilité.Membres de structures ou les unions
Les noms des membres sont alloués dans les espaces de noms associés à chaque structure et type d'union.Autrement dit, le même identificateur peut être un nom de composant dans plusieurs structures ou d'union en même temps.Les définitions des noms de composants se produisent toujours dans des spécificateurs de structure ou de type union.Les utilisations des noms de composants suivent toujours immédiatement les opérateurs de sélection des membres (- > et .).Le nom d'un membre doit être unique dans la structure ou l'union, mais pas nécessairement distinct d'autres noms dans le programme, y compris les noms des membres de différents structures et unions, ou de la structure lui-même.identificateurs ordinaires
Tous les autres noms sont classées dans un espace de noms qui inclut des variables, des fonctions (paramètres formels y compris et variables locales), et des constantes d'énumération.Les noms d'identificateurs ont imbriqué la visibilité, vous pouvez donc les redéfinir dans les blocs.noms de typedef
Les noms de typedef ne peuvent pas être utilisés comme identificateurs dans la même portée.
Par exemple, étant donné que les balises de structure, les membres de structures, et les noms de variables sont dans les trois espaces de noms différents, les trois éléments nommés student dans cet exemple ne sont pas en conflit.le contexte de chaque élément permet la traduction correcte de chaque occurrence d' student dans le programme.(Pour plus d'informations sur les structures, consultez déclarations de structure.)
struct student {
char student[20];
int class;
int id;
} student;
Lorsque student apparaît après le mot clé d' struct , le compilateur identifie comme une balise de structure.Lorsque student s'affiche après un opérateur member-selection (- > ou .), le nom fait référence au membre de structure.Dans d'autres cas, student fait référence à la variable de structure.Toutefois, surcharger l'espace de noms de balises n'est pas recommandé puisqu'il masque la signification.