Znalazłem to podczas czytania kodu źródłowego.C++ pusta obsada i przecinek operatora w #define
#define MACRO(x) if((void) 0, (x)); else some_func();
Nie rozumiem w pełni przyczyn tego przecinka operatora i pustej obsady. To prawdopodobnie ma coś wspólnego z ochroną makr. Wiem, że (void)0
jest czasami używany do ochrony kaskadowych else
s w makrach, takich jak w if(...) then foo(); else (void)0
.
Jakieś pomysły, dlaczego występuje przecinek operatora?
edit: Zaczynam myśleć, że to ma coś wspólnego z owl(0,0)
.
Czy jesteś pewien, że nawet kompiluje? – ronag
@ronag: tak, to kompiluje. Odrzucenie do pustki jest miłym trikiem, jeśli chcesz napisać 'return f();' z funkcji void, gdy 'f' nie jest puste. – ybungalobill
Jestem ciekawy, czy jest to odpowiednik '#define MACRO (X) if (! (X)) {some_func()}' – Arun