poco encontré esta macro GCC:¿Cómo `({...})` devuelve un valor?
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
no me di cuenta antes de ver este código, que un bloque de código puede {...}
valor de alguna manera volver en C.
1) ¿Me podría dar una ¿Insinúa cómo funciona esto?
Aunque, por lo general era capaz de conseguir el mismo resultado mediante el abuso del operador coma:
#define max(a,b) \
(typeof (a) _a = (a), \
typeof (b) _b = (b), \
(_a > _b ? _a : _b))
o si sólo era para efecto secundario, lo usaría do { ... } while(0)
2) ¿Qué es la forma preferida de hacer esto?
que podría convertirse en una pregunta protegida! muchos programadores C (y C++, creo) no saben que '({...})' es una extensión GCC y no parte del lenguaje C. EN MI HUMILDE OPINIÓN. – Jack