J'ai le codeMacro et fonction avec le même nom
#define myfunc(a,b) myfunc(do_a(a), do_b(b))
void myfunc(int a, int b)
{
do_blah(a,b);
}
int main()
{
int x = 6, y = 7;
myfunc(x,y);
return 0;
}
suivant, je veux que le pré-processeur pour étendre la fonction myfunc seulement à appeler. Code requis après le pré-traitement ressemble à ceci:
void myfunc(int a, int b)
{
do_blah(a,b);
}
int main()
{
int x = 6, y = 7;
myfunc(do_a(x),do_b(y));
return 0;
}
Le problème est que la définition de la fonction est également étendu comme celui-ci
void myfunc(do_a(int a), do_b(int b))
{
do_blah(a,b);
}
Est-il possible de faire macro est que si nous élargissons une fonction appel? J'ai essayé beaucoup de solutions, et il semble impossible, mais j'espère que quelqu'un a vu la situation comme ça ..
REMARQUE: s'il vous plaît ne me dites pas de renommer les noms de macro ou fonction: D
Update1: Merci pour ton aide. Mais je ne peux que changer la définition de la macro, je ne peux pas changer sa position et je ne peux pas changer la mise en œuvre de la fonction.
Cela fonctionne :) merci – Yousf
Je pense que certains préprocesseurs peuvent rechigner à l'utilisation récursive de la forme myfunc (xxx, xxx).Je ferais #define myfunc (a, b) (myfunc) (do_a (a), do_b (b)) int (myfunc) (int a, int b) & c –
Bon point, Tim, merci ! Mais je pense qu'il est prudent de supposer que le préprocesseur n'entre jamais dans une boucle récursive (cf. la norme 6.10.3.4/2 "... si des remplacements imbriqués rencontrent le nom de la macro en cours de remplacement, il n'est pas remplacé ..."). – pmg