Bumped into some code like this in our code base... which made me worried.
int foo(int a); // Forward declaration.
int baz() {
int result = {
i
This is a GCC extension to C called 'statement expressions': http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
The key thing is that a statement expression returns the last thing it does as the value of the 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.
In your example, that would be whatever foo(a)
returns.
However the block must be enclosed in parens for GCC to accept the syntax.
int foo(); // Forward declaration.
int baz() {
int result = ({
int a = dosomestuff();
foo(a);
}) ? 0 : -1;
return result;
}
I'm unaware of any other compiler that supports this.