[so] do{ ...} while(0);

Razvan Deaconescu razvand at cs.pub.ro
Mon May 5 22:53:30 EEST 2008


On Mon, 2008-05-05 at 22:42 +0300, Andrei Voinescu wrote:
> Nu este suficient sa fie intr-un bloc de acolade ? 
> 
> 
> Andrei 
> 
> p.s. Asa vad ca faceau si in link, doar ca acolo presupunea din varii
> motive ca se va pune ; dupa apelul de macro, ceea ce nu prea are
> logica, oricum si in cazul celalalt ai avea in macro do { .. }
> while(0); si mai pui ';' si iti vor iesi ;; si tot nu-l va interpreta
> ca else.

#define print_so_rules_forever(msg)         \
     do {                                   \
           puts(msg);                       \
           puts("I love hardcore macros");  \
     } while (0)

Fara ; (punct si virgula). Te forteaza sa o pui. Daca o pui din
greseala, atunci e acelasi lucru cu folosirea acoladelor.

De-asta este recomandata constructia do { ... } while (0) in loc de
acolade. Daca folosesti
  print_so_rules_forever(msg)
(fara ;) iti va da eroare de compilare.

Razvan


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



More information about the so mailing list