Spazi dei nomiName Spaces

Il compilatore ha configurato gli "spazi dei nomi" per distinguere tra gli identificatori utilizzati per diversi tipi di elementi.The compiler sets up "name spaces" to distinguish between the identifiers used for different kinds of items. I nomi all'interno di ogni spazio dei nomi devono essere univoci evitare conflitti, ma un nome identico può apparire in più spazi dei nomi.The names within each name space must be unique to avoid conflict, but an identical name can appear in more than one name space. Ciò significa che è possibile utilizzare lo stesso identificatore per due o più elementi diversi, a condizione che gli elementi siano in spazi dei nomi diversi.This means that you can use the same identifier for two or more different items, provided that the items are in different name spaces. Il compilatore può risolvere i riferimenti basati sul contesto sintattico dell'identificatore del programma.The compiler can resolve references based on the syntactic context of the identifier in the program.

Nota

Non confondere la nozione limitata del linguaggio C di uno spazio dei nomi con la funzionalità dello "spazio dei nomi" del linguaggio C++.Do not confuse the limited C notion of a name space with the C++ "namespace" feature. Per altre informazioni, vedere Spazi dei nomi in Riferimenti del linguaggio C++.See Namespaces in the C++ Language Reference for more information.

In questo elenco vengono descritti gli spazi dei nomi utilizzati nel linguaggio C.This list describes the name spaces used in C.

Etichette di istruzioneStatement labels
Le etichette di istruzione denominate fanno parte delle istruzioni.Named statement labels are part of statements. Le definizioni di etichette di istruzione vengono sempre seguite dai due punti, ma non fanno parte delle etichette case.Definitions of statement labels are always followed by a colon but are not part of case labels. Le modalità di utilizzo delle etichette di istruzione seguono sempre immediatamente la parola chiave goto.Uses of statement labels always immediately follow the keyword goto. Le etichette di istruzione non devono essere differenti da altri nomi o dai nomi delle etichette di altre funzioni.Statement labels do not have to be distinct from other names or from label names in other functions.

Tag della struttura, di unione e di enumerazioneStructure, union, and enumeration tags
Questi tag fanno parte degli identificatori di tipo struttura, unione ed enumerazione e, se presenti, seguono sempre immediatamente le parole riservate struct, union o enum.These tags are part of structure, union, and enumeration type specifiers and, if present, always immediately follow the reserved words struct, union, or enum. I nomi di tag devono essere differenti da tutti gli altri tag della struttura, di enumerazione o di unione con la stessa visibilità.The tag names must be distinct from all other structure, enumeration, or union tags with the same visibility.

Membri di strutture o unioniMembers of structures or unions
I nomi dei membri vengono allocati negli spazi dei nomi associati a ciascun tipo di unione e struttura.Member names are allocated in name spaces associated with each structure and union type. Pertanto, lo stesso identificatore può essere contemporaneamente il nome di un componente in un numero indefinito di strutture o unioni.That is, the same identifier can be a component name in any number of structures or unions at the same time. Le definizioni dei nomi di componenti si verificano sempre negli identificatori del tipo di unione o struttura.Definitions of component names always occur within structure or union type specifiers. La modalità di utilizzo dei nomi componente segue sempre immediatamente gli operatori di selezione dei membri (-> e .).Uses of component names always immediately follow the member-selection operators (-> and .). Il nome di un membro deve essere univoco nella struttura o unione, ma non deve essere diverso da altri nomi nel programma, inclusi i nomi dei membri di strutture e unioni differenti o il nome della struttura stessa.The name of a member must be unique within the structure or union, but it does not have to be distinct from other names in the program, including the names of members of different structures and unions, or the name of the structure itself.

Identificatori comuniOrdinary identifiers
Tutti gli altri nomi rientrano in uno spazio dei nomi che include le variabili, le funzioni (inclusi i parametri formali e le variabili locali) e le costanti di enumerazione.All other names fall into a name space that includes variables, functions (including formal parameters and local variables), and enumeration constants. I nomi degli identificatori possiedono una visibilità Nested, pertanto è possibile ridefinirli all'interno di blocchi.Identifier names have nested visibility, so you can redefine them within blocks.

Nomi typedefTypedef names
I nomi typedef non possono essere utilizzati come identificatori nello stesso ambito.Typedef names cannot be used as identifiers in the same scope.

Ad esempio, poiché i tag della struttura, i membri della struttura e i nomi di variabili sono in tre spazi dei nomi diversi, i tre elementi denominati student in questo esempio non sono in conflitto.For example, since structure tags, structure members, and variable names are in three different name spaces, the three items named student in this example do not conflict. Il contesto di ogni elemento consente la corretta interpretazione di ogni occorrenza di student nel programma.The context of each item allows correct interpretation of each occurrence of student in the program. Per informazioni sulle strutture, vedere Dichiarazioni di struttura.(For information about structures, see Structure Declarations.)

struct student {  
   char student[20];  
   int class;  
   int id;  
   } student;  

Quando viene visualizzato student dopo la parola chiave struct, il compilatore lo riconosce come un tag della struttura.When student appears after the struct keyword, the compiler recognizes it as a structure tag. Quando student viene visualizzato dopo un operatore di selezione dei membri (-> o .), il nome fa riferimento al membro della struttura.When student appears after a member-selection operator (-> or .), the name refers to the structure member. In altri contesti, student fa riferimento alla variabile di struttura.In other contexts, student refers to the structure variable. Tuttavia, l'overload dello spazio dei nomi di tag non è consigliato poiché rende poco chiaro il significato.However, overloading the tag name space is not recommended since it obscures meaning.

Vedere ancheSee Also

Struttura del programmaProgram Structure