Powiel możliwe:
in what versions of c is a block inside parenthesis used to return a value valid?Dlaczego to jest prawidłowe C? --- ({123;}) ma wartość 123
Poniżej znajduje się bezpieczny typu wersja typowego MAX makro (to działa na gcc 4.4.5):
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
Tutaj widzimy, że to wyrażenie, max (a, b) zwraca wynik wyrażenia
_a > _b ? _a : _b;
mimo że wyrażenie to znajduje się w bloku. Tak, ja zbadane i stwierdzono, że jest to ważny C:
int a = ({123;}); // a is 123
Może ktoś wyjaśnić, dlaczego jest to ważne gramatyki i co prawda zachowanie ({instrukcje}) jest? Ponadto zauważysz, że {123;} nie jest prawidłowym wyrażeniem, ale tylko ({123;}).
Powielania: [Paź 2009] (http://stackoverflow.com/questions/1635549/in-what-versions-of-c-is-a-block-inside -parenthesis-used-to-return-a-value-valid) [maj 2010] (http://stackoverflow.com/questions/2892981/weird-initialization-in-c) [Jan 2010] (http: // stackoverflow .com/questions/2075930/more-information-in-c) –