Recentemente ho trovato questa macro GCC:Come `({...})` restituisce un valore?
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
Non avevo capito che prima di vedere questo codice, che un blocco di codice {...}
possa in qualche modo il valore di ritorno in C.
1) Mi potrebbe dare un suggerire come funziona?
Benché, di solito è in grado di ottenere lo stesso risultato abusando l'operatore virgola:
#define max(a,b) \
(typeof (a) _a = (a), \
typeof (b) _b = (b), \
(_a > _b ? _a : _b))
o se era solo per effetto collaterale userei do { ... } while(0)
2) Nei è il modo preferito per farlo?
che potrebbe diventare una domanda protetta! molti programmatori C (e C++, credo) non sanno che '({...})' è un'estensione GCC e non fa parte del linguaggio C. A PARER MIO. – Jack