[gull] cours C++

Marc Mongenet marc.mongenet at gmail.com
Thu Mar 2 12:40:59 CET 2006


Le 02/03/06, Marc SCHAEFER<schaefer at alphanet.ch> a écrit :
> 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.

En outre, si on ne déclare pas de variable, alors
(function(x), debug(x)) avec l'opérateur virgule a l'avantage d'être
une expression et donc d'être plus largement utilisable, comme
un simple appel de fonction.

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

Les fonctions inline existent depuis longtemps dans C++ (et sont
importantes pour faire ne serait-ce que des getter et des setter
efficaces), dans GCC et dans C99 (donc dans C depuis 7 ans).
Je ne suis cependant pas sûr que la sémantique soit
parfaitement identique lorsqu'on commence à prendre l'adresse
d'une fonction inline, à la déclarer extern, et autres usages moins
communs.

Je crois même me souvenir que Linux utilise des propriétés tout
à fait spécifiques des fonctions inline de GCC et que des variations
d'implémentation ont posé problème.

>
> maintenant, combien de programmeurs C ici présents (s'il en reste :))

;-)

Marc Mongenet



More information about the gull mailing list