Cenni preliminari sulle dichiarazioniOverview of Declarations

Una "dichiarazione" consente di specificare l'interpretazione e gli attributi di un set di identificatori.A "declaration" specifies the interpretation and attributes of a set of identifiers. Una dichiarazione che causa anche la prenotazione delle risorse di archiviazione per l'oggetto o la funzione denominati dall'identificatore è chiamata "definizione".A declaration that also causes storage to be reserved for the object or function named by the identifier is called a "definition." Le dichiarazioni C per variabili, funzioni e tipi hanno la sintassi seguente:C declarations for variables, functions, and types have this syntax:

SintassiSyntax

declaration:declaration:
declaration-specifiers attribute-seqoptinit-declarator-listopt;declaration-specifiers attribute-seqoptinit-declarator-listopt;

/* attribute-seqopt è specifico di Microsoft //* *attribute-seqopt is Microsoft specific */

declaration-specifiers:declaration-specifiers:
storage-class-specifier declaration-specifiersopzstorage-class-specifier declaration-specifiersopt

type-specifier declaration-specifiersopztype-specifier declaration-specifiersopt

type-qualifier declaration-specifiersopztype-qualifier declaration-specifiersopt

init-declarator-list:init-declarator-list:
init-declaratorinit-declarator

init-declarator-list , init-declaratorinit-declarator-list , init-declarator

init-declarator:init-declarator:
declaratordeclarator

declarator = initializerdeclarator = initializer

Nota

Questa sintassi per declaration non viene ripetuta nelle sezioni seguenti.This syntax for declaration is not repeated in the following sections. La sintassi nelle sezioni seguenti di solita inizia con il non terminale declarator.Syntax in the following sections usually begins with the declarator nonterminal.

Le dichiarazioni nel componente init-declarator-list contengono gli identificatori ai quali viene assegnato il nome; init è l'abbreviazione di inizializzatore.The declarations in the init-declarator-list contain the identifiers being named; init is an abbreviation for initializer. L'elenco init-declarator-list è una sequenza di dichiaratori separati da virgola, ognuno dei quali può avere altre informazioni sui tipi, oppure un inizializzatore o entrambi.The init-declarator-list is a comma-separated sequence of declarators, each of which can have additional type information, or an initializer, or both. declarator contiene gli eventuali identificatori dichiarati.The declarator contains the identifiers, if any, being declared. Il non terminale declaration-specifiers consiste in una sequenza di identificatori di tipi e di classi di archiviazione che indicano il collegamento, la durata di archiviazione e almeno una parte del tipo di entità denotate dai dichiaratori.The declaration-specifiers nonterminal consists of a sequence of type and storage-class specifiers that indicate the linkage, storage duration, and at least part of the type of the entities that the declarators denote. Di conseguenza, le dichiarazioni sono costituite da una determinata combinazione di identificatori di classi di archiviazioni, identificatori di tipi, qualificatori di tipo e inizializzatori.Therefore, declarations are made up of some combination of storage-class specifiers, type specifiers, type qualifiers, declarators, and initializers.

Le dichiarazioni possono contenere uno o più degli attributi facoltativi elencati in attribute-seq; seq è l'abbreviazione di sequenza.Declarations can contain one or more of the optional attributes listed in attribute-seq; seq is an abbreviation for sequence. Questi attributi specifici di Microsoft eseguono una varietà di funzioni, che saranno discusse più dettagliatamente nel resto di questo manuale.These Microsoft-specific attributes perform a variety of functions, which are discussed in detail throughout this book.

Nella forma generale di una dichiarazione di variabili, type-specifier restituisce il tipo di dati della variabile.In the general form of a variable declaration, type-specifier gives the data type of the variable. type-specifier può essere un'istruzione composta, ad esempio quando il tipo viene modificato da const o da volatile.The type-specifier can be a compound, as when the type is modified by const or volatile. declarator fornisce il nome della variabile, possibilmente modificato in modo da dichiarare un tipo di matrice o puntatore.The declarator gives the name of the variable, possibly modified to declare an array or a pointer type. Di seguito è riportato un esempio:For example,

int const *fp;  

dichiara una variabile denominata fp come puntatore a un valore int non modificabile (const).declares a variable named fp as a pointer to a nonmodifiable (const) int value. È possibile definire più variabili in una dichiarazione usando più dichiaratori, separati da virgole.You can define more than one variable in a declaration by using multiple declarators, separated by commas.

Una dichiarazione deve avere almeno un dichiaratore oppure il relativo identificatore di tipi deve dichiarare un tag della struttura, un tag di unione o i membri di un'enumerazione.A declaration must have at least one declarator, or its type specifier must declare a structure tag, union tag, or members of an enumeration. I dichiaratori forniscono le eventuali informazioni rimanenti su un identificatore.Declarators provide any remaining information about an identifier. Un dichiaratore è un identificatore che può essere modificato con parentesi quadre ([ ]), asterischi (\) o parentesi tonde (( )* ) per dichiarare rispettivamente un tipo di matrice, di puntatore o di funzione.A declarator is an identifier that can be modified with brackets ([ ]), asterisks (\), or parentheses ( **( )* ) to declare an array, pointer, or function type, respectively. Quando si dichiarano variabili semplici (ad esempio caratteri, integri ed elementi a virgola mobile) o strutture e unioni di variabili semplici, declarator è solo un identificatore.When you declare simple variables (such as character, integer, and floating-point items), or structures and unions of simple variables, the declarator is just an identifier. Per altre informazioni sui dichiaratori, vedere Dichiaratori e dichiarazioni di variabili.For more information on declarators, see Declarators and Variable Declarations.

Tutte le definizioni sono implicitamente dichiarazioni, ma non tutte le dichiarazioni sono definizioni.All definitions are implicitly declarations, but not all declarations are definitions. Ad esempio, le dichiarazioni di variabili che iniziano con l'identificatore di classi di archiviazione extern fanno "riferimento" alle dichiarazioni, piuttosto che "definirle".For example, variable declarations that begin with the extern storage-class specifier are "referencing," rather than "defining" declarations. Se è necessario fare riferimento a una variabile esterna prima che sia definita oppure se viene definita in un altro file di origine da quello in cui è usata, è necessaria una dichiarazione extern.If an external variable is to be referred to before it is defined, or if it is defined in another source file from the one where it is used, an extern declaration is necessary. Le risorse di archiviazione non vengono allocate "facendo riferimento" alle dichiarazioni, né è possibile inizializzare le variabili nelle dichiarazioni.Storage is not allocated by "referencing" declarations, nor can variables be initialized in declarations.

Una classe o un tipo di archiviazione (o entrambi) è necessaria nelle dichiarazioni delle variabili.A storage class or a type (or both) is required in variable declarations. Fatta eccezione per __declspec, è consentito un solo identificatore di classi di archiviazione in una dichiarazione e non tutti gli identificatori di classi di archiviazione sono consentiti in ogni contesto.Except for __declspec, only one storage-class specifier is allowed in a declaration and not all storage-class specifiers are permitted in every context. La classe di archiviazione __declspec è consentita con altri identificatori di classi di archiviazione e più di una volta.The __declspec storage class is allowed with other storage-class specifiers, and it is allowed more than once. L'identificatore di classi di archiviazione di una dichiarazione incide sulla modalità di archiviazione e inizializzazione dell'elemento dichiarato e su quali parti di un programma possono fare riferimento all'elemento.The storage-class specifier of a declaration affects how the declared item is stored and initialized, and which parts of a program can reference the item.

I terminali storage-class-specifier definiti in C sono auto, extern, register, static e typedef.The storage-class-specifier terminals defined in C include auto, extern, register, static, and typedef. In più, Microsoft C include il terminale storage-class-specifier __declspec.In addition, Microsoft C includes the storage-class-specifier terminal __declspec. Tutti i terminali storage-class-specifier, tranne typedef e __declspec, sono trattati nella sezione Classi di archiviazione.All storage-class-specifier terminals except typedef and __declspec are discussed in Storage Classes. Per informazioni su typedef, vedere Dichiarazioni typedef.See Typedef Declarations for information about typedef. Per informazioni su __declspec, vedere Attributi di classi di archiviazione estesi.See Extended Storage-Class Attributes for information about __declspec.

La posizione della dichiarazione all'interno del programma di origine e la presenza o l'assenza di altre dichiarazioni della variabile sono fattori importanti nel determinare la durata delle variabili.The location of the declaration within the source program and the presence or absence of other declarations of the variable are important factors in determining the lifetime of variables. Possono esserci più ridichiarazioni, ma una sola definizione.There can be multiple redeclarations but only one definition. Tuttavia, una definizione può apparire in più unità di conversione.However, a definition can appear in more than one translation unit. Per oggetti con collegamento interno, questa regola di applica separatamente a ogni unità di conversione, perché gli oggetti collegati internamente sono univoci di un'unità di conversione.For objects with internal linkage, this rule applies separately to each translation unit, because internally linked objects are unique to a translation unit. Per gli oggetti con collegamenti esterni, questa regola si applica all'intero programma.For objects with external linkage, this rule applies to the entire program. Per altre informazioni sulla visibilità, vedere Durata, ambito, visibilità e collegamento.See Lifetime, Scope, Visibility, and Linkage for more information about visibility.

Gli identificatori di tipi forniscono alcune informazioni sui tipi di dati degli identificatori.Type specifiers provide some information about the data types of identifiers. L'identificatore di tipi predefinito è int.The default type specifier is int. Per altre informazioni, vedere Identificatori di tipi.For more information, see Type Specifiers. Gli identificatori di tipi possono anche definire i tag del tipo, i nomi di componenti di struttura e unione e le costanti di enumerazione.Type specifiers can also define type tags, structure and union component names, and enumeration constants. Per altre informazioni, vedere Dichiarazioni di enumerazioni, Dichiarazioni di struttura e Dichiarazioni di unione.For more information see Enumeration Declarations, Structure Declarations, and Union Declarations.

Esistono due terminali type-qualifier: const e volatile.There are two type-qualifier terminals: const and volatile. Questi qualificatori specificano le proprietà aggiuntive dei tipi pertinenti solo durante l'accesso agli oggetti di tale tipo attraverso le espressioni l-value.These qualifiers specify additional properties of types that are relevant only when accessing objects of that type through l-values. Per altre informazioni su const e volatile, vedere Qualificatori di tipo.For more information on const and volatile, see Type Qualifiers. Per una definizione di l-value, vedere Espressioni L-Value e R-Value.For a definition of l-values, see L-Value and R-Value Expressions.

Vedere ancheSee Also

Riepilogo di sintassi del linguaggio C C Language Syntax Summary
Dichiarazioni e tipi Declarations and Types
Riepilogo delle dichiarazioniSummary of Declarations