Istruzione composta (C)Compound Statement (C)

Un'istruzione composta (detta anche "blocco") viene in genere visualizzata come corpo di un'altra istruzione, ad esempio l'istruzione if.A compound statement (also called a "block") typically appears as the body of another statement, such as the if statement. In Dichiarazioni e tipi viene descritto il modulo e il significato delle dichiarazioni che possono essere visualizzate nell'intestazione di un'istruzione composta.Declarations and Types describes the form and meaning of the declarations that can appear at the head of a compound statement.

SintassiSyntax

compound-statement:compound-statement:
{ declaration-list optstatement-listopt}{ declaration-list optstatement-listopt}

declaration-list:declaration-list:
declarationdeclaration

declaration-list dichiarazionedeclaration-list declaration

statement-list:statement-list:
statementstatement

statement-list statementstatement-list statement

Se esistono dichiarazioni, devono precedere qualsiasi istruzione.If there are declarations, they must come before any statements. L'ambito di ogni identificatore dichiarato all'inizio di un'istruzione composta si estende dal punto di dichiarazione fino alla fine del blocco.The scope of each identifier declared at the beginning of a compound statement extends from its declaration point to the end of the block. È visibile nel blocco a meno che non esista una dichiarazione dello stesso identificatore in un blocco interno.It is visible throughout the block unless a declaration of the same identifier exists in an inner block.

Si presuppone che gli identificatori in un'istruzione composta siano auto salvo se dichiarati esplicitamente con register, static o extern, mentre le funzioni possono essere solo extern.Identifiers in a compound statement are presumed auto unless explicitly declared otherwise with register, static, or extern, except functions, which can only be extern. È possibile ignorare l'identificatore extern nelle dichiarazioni di funzione e la funzione sarà sempre extern.You can leave off the extern specifier in function declarations and the function will still be extern.

L'archiviazione non viene allocata e l'inizializzazione non è consentita se una variabile o una funzione viene dichiarata in un'istruzione composta con classe di archiviazione extern.Storage is not allocated and initialization is not permitted if a variable or function is declared in a compound statement with storage class extern. La dichiarazione fa riferimento a una variabile esterna o a una funzione definita altrove.The declaration refers to an external variable or function defined elsewhere.

Le variabili dichiarate in un blocco con la parola chiave auto o register vengono ridistribuite e, se necessario, inizializzate ogni volta che viene inserita l'istruzione composta.Variables declared in a block with the auto or register keyword are reallocated and, if necessary, initialized each time the compound statement is entered. Queste variabili non vengono definite quando si esce dall'istruzione composta.These variables are not defined after the compound statement is exited. Se una variabile dichiarata in un blocco dispone dell'attributo static, la variabile viene inizializzata quando inizia l'esecuzione del programma e mantiene il suo valore nell'intero programma.If a variable declared inside a block has the static attribute, the variable is initialized when program execution begins and keeps its value throughout the program. Vedere Classi di archiviazione per altre informazioni relative a static.See Storage Classes for information about static.

In questo esempio viene illustrata un'istruzione composta:This example illustrates a compound statement:

if ( i > 0 )   
{  
    line[i] = x;  
    x++;  
    i--;  
}  

In questo esempio, se i è maggiore di 0, tutte le istruzioni nell'istruzione composta vengono eseguite in ordine.In this example, if i is greater than 0, all statements inside the compound statement are executed in order.

Vedere ancheSee Also

IstruzioniStatements