Return value from local scope?

后端 未结 6 1016
终归单人心
终归单人心 2021-01-05 11:06

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         


        
6条回答
  •  逝去的感伤
    2021-01-05 11:38

    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.

提交回复
热议问题