Duplicar posibles:
in what versions of c is a block inside parenthesis used to return a value valid?¿Por qué esta C válida? --- ({123;}) evalúa a 123
La siguiente es una versión de tipo seguro de un típico macro MAX (esto funciona en gcc 4.4.5):
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
Aquí, vemos que esta expresión, max (a, b) devuelve el resultado de la expresión
_a > _b ? _a : _b;
aunque esta expresión está en un bloque. Así, investigué y descubrí que esto es válido C:
int a = ({123;}); // a is 123
Puede alguien explicar por qué esto es la gramática válida y cuál es el verdadero comportamiento de las declaraciones ({}) es? Además, notará que {123;} no es una expresión válida, pero solo ({123;}) es.
Dupes: [Oct 2009] -parenthesis-used-to-return-a-value-valid) [mayo de 2010] (http://stackoverflow.com/questions/2892981/weird-initialization-in-c) [ene 2010] (http: // stackoverflow .com/questions/2075930/more-information-on-in-c) –