l bloque @C se convierte en expresión: ({int a = 1; int b = 2; a + b;}) es igual a 3

Mientras leohttp: //en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effect, Me encontré con este ejemplo:

\#define max(a,b) \
   ({ typeof (a) _a = (a); \
       typeof (b) _b = (b); \
     _a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK?

Que puede usar exactamente como una función, es decir,max(1,2) es una expresión que evalúa a 2.

Mi pregunta es,Cómo({ statment-list last-expression; }) construcción evaluar al valor de la última expresión? Específicamente, ¿cómo se ve un árbol de análisis de esta construcción? Pensé{ } siempre significó una declaración compuesta, y las declaraciones no tienen valores. Traté de cavar en laC gramática y todavía no podía resolver este problema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta