[so] Macro DIE
Laura Vasilescu
vasilescu.laura at gmail.com
Fri Feb 24 13:12:54 EET 2012
2012/2/24 Cristian Condurache <cristian.condurache at gmail.com>:
> M-am uitat peste definitia macro-ului DIE de pe wiki [1] si nu inteleg care
> este rolul while(0)-ului exterior. Imi poate spune cineva?
>
> Cristian Condurache
>
> [1] http://elf.cs.pub.ro/so/wiki/laboratoare/resurse/die
Salut!
Să luăm un exemplu mai simplu:
#define MACRO(x)
x++; \
printf("%d\n", x)
Substituția se face textual. Dacă ai folosi undeva:
if (conditie) MACRO(x);
printf-ul se execută indiferent de valoarea condiției; acesta este
motivul pentru care setul de instrucțiuni trebuie să apară într-un
bloc.
Redefinim așa:
#define MACRO(x) { \
x++; \
printf("%d\n", x); \
}
În momentul în care folosim MACRO(x) nu o să putem să punem ";" la
final, pentru că nu are sens.
Soluția de a folosi do-while este un trick pentru a rezolva această
problemă. (nici macro-ul DIE nu are ";" după while tocmai pentru a
lăsa utilizatorul să pună ";"). Se folosește while(0) pentru a nu se
executa setul de instrucțiuni decât o singură dată.
--
Laura
More information about the so
mailing list