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.
fonte
2013-10-16 03:33:15
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
prova anche questo 'int a = [10];' –
Il significato è stato spiegato (è un'estensione gcc), ma è scritto molto più chiaramente e portabilmente come 'int a = 10;' –