Question

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!

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top