bloco @C se torna expressão: ({int a = 1; int b = 2; a + b;}) é igual a 3
Enquanto lêhttp: //en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effect, Me deparei com este exemplo:
\#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK?
Que você pode usar exatamente como uma função, ou seja,max(1,2)
é uma expressão avaliada como 2.
Minha pergunta é,Como({ statment-list last-expression; })
construir avaliar para o valor da última expressão? Especificamente, como é uma árvore de análise dessa construção? Eu pensei{ }
sempre significou uma instrução composta, e as instruções não têm valores. Eu tentei cavar noC gramática e ainda não consegui resolver esse problem