2013-10-16 12 views
7

Durante la mia C pratica della lingua, ho viso un'espressione e poi mi get it semplificato come segue:come spiegare questa espressione "int a = ({10;});" in linguaggio C?

int a=({10;}); 

Si tratta di un'espressione giuridica dal momento che viene passato il compilatore gcc. Si prega di concentrarsi su questa parte: ({10;}). Qualcuno è in grado di spiegarlo? Più è dettagliato, meglio è. Grazie!

+1

Sono quasi certo che è un'estensione gcc piuttosto che un pezzo legale di codice C. Sono curioso di vedere di cosa si tratta, però. – templatetypedef

+0

prova anche questo 'int a = [10];' –

+2

Il significato è stato spiegato (è un'estensione gcc), ma è scritto molto più chiaramente e portabilmente come 'int a = 10;' –

risposta

7

Questa è una espressione espressione. Si tratta di una gcc extension e secondo la documentazione 6.1 Statements and Declarations in Expressions:

The last thing in the compound statement should be an expression followed by a semicolon; the value of this subexpression serves as the value of the entire construct.

quindi per questo pezzo di codice:

int a=({10;}); 

base a queste regole il valore sarà 10 che sarà assegnato a a.

Questa estensione è uno many gcc extensions used in the Linux kernel, anche se l'articolo collegato in realtà non copre le espressioni dichiarazione, questa kernel newbies FAQ entry spiega alcune delle motivazioni alla base utilizzando espressioni dichiarazione nel kernel di Linux.

quanto gcc note su documenti compilazione con l'opzione di -pedantic vi avviserà quando si utilizza un'estensione gcc.

1

Non è C standard, ma un'estensione di GCC denominata statement expression. Un'istruzione composta racchiusa tra parentesi può apparire come espressione.

The last thing in the compound statement should be an expression followed by a semicolon; the value of this subexpression serves as the value of the entire construct.

Torna nel tuo esempio:

int a=({10;}); 

{10;} serve come l'espressione istruzione composta, in modo da a ha un valore di 10.

Problemi correlati