Mientras lee http://en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effects, me encontré con este ejemplo:bloque C se convierte en la expresión: ({int a = 1; int b = 2; a + b;}) es igual a 3
\#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK?
que se puede utilizar exactamente como una función, es decir, max(1,2)
es una expresión que evalúa a 2.
Mi PREGUNTA es ¿Cómo se evalúa el constructo ({ statment-list last-expression; })
con el valor de last-expression? Específicamente, ¿cómo se ve un árbol de análisis sintáctico de esta construcción? Pensé que { }
siempre significaba una declaración compuesta, y las declaraciones no tenían valores. Traté de buscar en la gramática C y todavía no podía resolver este problema.
'42;' es una afirmación también :-) – paxdiablo
Ah, pero sospecho que el OP sabe que '42;' es una afirmación porque es una declaración en el Estándar C. La expresión de la declaración es no en el estándar C, sin embargo. –