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.