2015-05-27 12 views
12

Istnieje wiele pytań na temat przepełnienia stosu w związku z używaniem makr w postaci do { ... } while(0), ale jest to trochę inne. Rozumiem, dlaczego do { ... } while(0) jest używane do zawijania wielu linii kodu w rozszerzeniu makr. Ale jest jeszcze inna forma, którą często widzę: ({ ... }).Zalety: czy {} podczas (0) kontra ({}) w makrze?

Zaletą formularza ({ }) jest wyrażenie i może mieć "wartość zwracaną". To również (subiektywnie) czyta lepiej niż do { } while(0). Dlaczego więc nie jest zawsze używany? Jaka jest korzyść z używania zamiast tego do { } while(0) w makrze?

+0

Uwaga, w C++ 11 można uzyskać efekt * podobny * (o ile jest to wyrażenie) z '[&]() {/*...*/}()', ale wciąż ma kilka wad, takich jak niezdolność do "powrotu" (trzeba zaimplementować w stylu rust 'try!') lub użyć 'decltype' na wyrażenie (ponieważ lambdy nie są dozwolone w nieocenionych kontekstach). – o11c

Odpowiedz