Ho trovato questo mentre leggevo qualche codice sorgente.C++ void cast e operatore virgola in un #define
#define MACRO(x) if((void) 0, (x)); else some_func();
Non capisco appieno le ragioni dietro l'operatore virgola e il cast del vuoto. Questo probabilmente ha qualcosa a che fare con la protezione dalle macro, so che a volte viene usato lo (void)0
per proteggere i cascami else
in macro come in if(...) then foo(); else (void)0
.
Qualche idea sul perché l'operatore è la virgola?
edit: sto iniziando a pensare che questo ha qualcosa a che fare con la owl(0,0)
.
Sei sicuro che anche compila? – ronag
@ronag: sì, compila. il cast to void è un bel trucco se ti piace scrivere 'return f();' da una funzione void quando 'f' non è vuoto. – ybungalobill
Sono curioso di sapere se è equivalente a '#define MACRO (X) if (! (X)) {some_func()}' – Arun