Encontré esto mientras leía un código fuente.C++ void cast y operador coma en un #define
#define MACRO(x) if((void) 0, (x)); else some_func();
No entiendo completamente las razones detrás de esa coma de operador y el molde de vacío. Esto probablemente tiene algo que ver con la protección macro, sé que (void)0
se usa a veces para proteger a las cascadas else
s en macros como en if(...) then foo(); else (void)0
.
¿Alguna idea de por qué la coma del operador está allí?
edición: estoy empezando a pensar que esto tiene algo que ver con la owl(0,0)
.
¿Estás seguro de que incluso compila? – ronag
@ronag: sí compila. el lanzamiento al vacío es un buen truco si te gusta escribir 'return f();' desde una función vacía cuando 'f' no está vacía. – ybungalobill
Tengo curiosidad por saber si es equivalente a '#define MACRO (X) if (! (X)) {some_func()}' – Arun