Ambito e visibilitàScope and Visibility

La "visibilità di un identificatore determina il suo "ambito", ovvero le parti del programma in cui è possibile fare riferimento allo stesso identificatore.An identifier's "visibility" determines the portions of the program in which it can be referenced — its "scope." Un identificatore è visibile (ovvero, può essere utilizzato) solo nelle parti di programma incluse nel suo "ambito" e che, al fine di incrementare la restrittività, possono essere limitate al file, alla funzione, al blocco o al prototipo di funzione in cui viene visualizzato l'identificatore stesso.An identifier is visible (i.e., can be used) only in portions of a program encompassed by its "scope," which may be limited (in order of increasing restrictiveness) to the file, function, block, or function prototype in which it appears. L'ambito di un identificatore corrisponde alla parte di programma in cui è possibile utilizzare il nome.The scope of an identifier is the part of the program in which the name can be used. Questa parte del programma viene anche chiamata "ambito lessicale."This is sometimes called "lexical scope." Le tipologie di ambito sono quattro: funzione, file, blocco e prototipo di funzione.There are four kinds of scope: function, file, block, and function prototype.

L'ambito di tutti gli identificatori, ad eccezione delle etichette, viene determinato dal livello in cui si verifica la dichiarazione.All identifiers except labels have their scope determined by the level at which the declaration occurs. La visibilità degli identificatori all'interno dei programmi viene determinata dalle seguenti regole, specifiche per ogni tipologia:The following rules for each kind of scope govern the visibility of identifiers within a program:

Ambito di tipo fileFile scope
Il dichiaratore, o identificatore di tipo, di un identificatore con ambito file appare all'esterno di qualunque blocco o elenco di parametri ed è accessibile da qualsiasi posizione nell'unità di conversione successivamente alla relativa dichiarazione.The declarator or type specifier for an identifier with file scope appears outside any block or list of parameters and is accessible from any place in the translation unit after its declaration. I nomi degli identificatori con ambito file vengono spesso definiti "globali" o "esterni".Identifier names with file scope are often called "global" or "external." L'ambito di un identificatore globale inizia in corrispondenza del punto della relativa definizione o dichiarazione e termina alla fine dell'unità di conversione.The scope of a global identifier begins at the point of its definition or declaration and terminates at the end of the translation unit.

Ambito di tipo funzioneFunction scope
L'etichetta è l'unico tipo di identificatore dotato di un ambito di tipo funzione.A label is the only kind of identifier that has function scope. L'etichetta viene dichiarata implicitamente quando viene utilizzata in un'istruzione.A label is declared implicitly by its use in a statement. I nomi delle etichette devono essere univoci all'interno di una funzione.Label names must be unique within a function. Per altre informazioni sulle etichette e sui nomi di queste, vedere Istruzioni goto e con etichetta.(For more information about labels and label names, see The goto and Labeled Statements.)

Ambito del bloccoBlock scope
Il dichiaratore, o identificatore di tipo, di un identificatore con ambito blocco viene visualizzato all'interno di un blocco o nell'elenco delle dichiarazioni di parametro formale in una definizione di funzione.The declarator or type specifier for an identifier with block scope appears inside a block or within the list of formal parameter declarations in a function definition. È visibile solo dal punto della relativa dichiarazione o definizione alla fine del blocco che contiene la stessa dichiarazione o definizione.It is visible only from the point of its declaration or definition to the end of the block containing its declaration or definition. Il suo ambito è limitato a tale blocco e a tutti i blocchi annidati nello stesso e termina alla parentesi graffa di chiusura del blocco associato.Its scope is limited to that block and to any blocks nested in that block and ends at the curly brace that closes the associated block. Questo tipo di identificatori sono talvolta denominati "variabili locali."Such identifiers are sometimes called "local variables."

Ambito di tipo prototipo di funzioneFunction-prototype scope
Il dichiaratore, o identificatore di tipo, di un identificatore con ambito di tipo prototipo di funzione viene visualizzato nell'elenco delle dichiarazioni di parametro presente in un prototipo di funzione, che non fa parte della dichiarazione di funzione.The declarator or type specifier for an identifier with function-prototype scope appears within the list of parameter declarations in a function prototype (not part of the function declaration). Il suo ambito termina alla fine del dichiaratore di funzione.Its scope terminates at the end of the function declarator.

Le dichiarazioni appropriate per rendere le variabili visibili in altri file di origine sono descritte in Classi di archiviazione.The appropriate declarations for making variables visible in other source files are described in Storage Classes. Tuttavia, le variabili e le funzioni dichiarate a livello esterno attraverso l'identificatore di classe di archiviazione static sono visibili solo all'interno del file di origine in cui sono definite.However, variables and functions declared at the external level with the static storage-class specifier are visible only within the source file in which they are defined. Tutte le altre funzioni sono visibili a livello globale.All other functions are globally visible.

Vedere ancheSee Also

Durata, ambito, visibilità e collegamentoLifetime, Scope, Visibility, and Linkage