Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to explain this expression "int a=({10;});" in C language?

During my C language practice, I face an expression and then I get it simplified as follows:

int a=({10;});

It is a legal expression since it gets past the gcc compiler. Please focus on this part: ({10;}). Is anybody able to explain it? The more detailed, the better. Thanks!

like image 250
kevin Avatar asked Oct 16 '13 03:10

kevin


2 Answers

This is a statement expression. It is a gcc extension and according to the documentation 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.

so for this piece of code:

int a=({10;});

according to these rules the value will be 10 which will be assigned to a.

This extension is one many gcc extensions used in the Linux kernel, although the linked article does not actually cover statement expressions, this kernel newbies FAQ entry explains some of the reasoning behind using statement expressions in the Linux kernel.

As the gcc document notes compiling with the -pedantic option will warn you when you are using a gcc extension.

like image 51
Shafik Yaghmour Avatar answered Oct 16 '22 08:10

Shafik Yaghmour


It's not standard C, but an extension of GCC called statement expression. A compound statement enclosed in parentheses may appear as an expression.

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.

Back to in your example:

int a=({10;});

{10;} serves as the compound statement expression, so a has a value of 10.

like image 1
Yu Hao Avatar answered Oct 16 '22 06:10

Yu Hao