Mögliche Duplizieren:
in what versions of c is a block inside parenthesis used to return a value valid?Warum ist das gültig C? --- ({123;}) den Wert 123
Das Folgende ist eine typsichere Version eines typischen MAX Makro (dies funktioniert auf gcc 4.4.5):
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
Hier sehen wir, dass dieser Ausdruck, max (a, b) gibt das Ergebnis des Ausdrucks
_a > _b ? _a : _b;
obwohl dieser Ausdruck in einem Block ist. So untersuchte ich, und fand, dass diese gültig C:
int a = ({123;}); // a is 123
Kann jemand erklären, warum diese gültige Grammatik ist und was das wahre Verhalten ({Anweisungen}) ist? Außerdem werden Sie feststellen, dass {123;} kein gültiger Ausdruck ist, sondern nur ({123;}).
Dupes: [Okt 2009] (http://stackoverflow.com/questions/1635549/in-what-versions-of-c-is-a-block-inside -parenthesis-used-to-return-a-value-valid [Mai 2010] (http://stackoverflow.com/questions/2892981/weird-initialization-in-c) [Januar 2010] (http: // stackoverflow .com/questions/2075930/more-information-on-in-c) –