[gull] cours C++

Marc SCHAEFER schaefer at alphanet.ch
Thu Mar 2 12:08:25 CET 2006


On Thu, Mar 02, 2006 at 10:58:54AM +0100, Leopoldo Ghielmetti wrote:
> Dans le cas de la macro de debug MA_MACRO il faut la définir comme ça:
> #ifdef DEBUG
> #  define MA_MACRO(x) do{function(x); debug(x);}while(0)
> #else /* !DEBUG */
> #  define MA_MACRO(x) function(x)
> #endif /* DEBUG */

{ function(x); debug(x) }  suffit probablement pour créer un bloc.

> Et si on sait p.e. que la variable x est un entier (chose qui est
> définie par le type des fonctions) il pourra aussi protéger x d'une
> mauvaise utilisation de la façon suivante:
> #  define MA_MACRO(x) do{int xx=(x); function(xx); debug(xx);}while(0)

juste, mais dans ce cas, une fonction inline (bon, spécifique gcc, à ma
connaissance) est meilleure, comme tu le montres plus bas.

> Clairement ce genre de macro ont tout leur sens dans la programmation C.
> En C++ il y a des solutions plus élégantes mais savoir écrire une bonne
> macro est fondamental pour la programmation en C et dérivés.

Exact ;)

maintenant, combien de programmeurs C ici présents (s'il en reste :))
ont compris le problème que je soulevais ?

Mon but était d'attirer l'attention des dangers de tout ce qui touche au
préprocesseur.




More information about the gull mailing list