int
main(int argc, char *argv[])
{
float f = MOYENNE(3, 1, 2, 3);
}
Pour voir ce que ça fait : gcc -E macrotest.c (tu fais passer le préprocesseur pour étendre la macro), ce qui donne :
int
main(int argc, char *argv[])
{
float f = (somme((3), 1, 2, 3) / (3));
}
Change les paramètres de MOYENNE dans le main, recommence la procédure ci dessus, et vois ce que ça donne.
Finalement, après quelques tests, tu te rends compte que la liste de paramètres variables se note nom... dans le prototype de la macro, et qu'on l'appelle par nom dans le corps de la macro.
Tout ça pour dire : vouloir savoir, c'est bien, attendre que ça tombe tout cuit, ça l'est moins. Quand tu as quelques pistes, si tu ne fais pas l'effort de fouiller par toi même, tu ne vas pas aller bien loin :-<
[^] # Re: macro à nombre variable d'arguments
Posté par Bastien Mourgues . En réponse au message fonction à nombre variable de paramètre. Évalué à 2.
tu copies la ligne dans ton fichier, exemple :
macrotest.c :
#define MOYENNE(nbr, args...) (somme((nbr), args) / (nbr))
int
main(int argc, char *argv[])
{
float f = MOYENNE(3, 1, 2, 3);
}
Pour voir ce que ça fait : gcc -E macrotest.c (tu fais passer le préprocesseur pour étendre la macro), ce qui donne :
int
main(int argc, char *argv[])
{
float f = (somme((3), 1, 2, 3) / (3));
}
Change les paramètres de MOYENNE dans le main, recommence la procédure ci dessus, et vois ce que ça donne.
Finalement, après quelques tests, tu te rends compte que la liste de paramètres variables se note nom... dans le prototype de la macro, et qu'on l'appelle par nom dans le corps de la macro.
Si tu as toujours des doutes, le texte "macro à nombre variable d'arguments" envoyé à google ( http://www.google.fr/search?hl=fr&q=macro+%C3%A0+nombre+(...)
) te renvoie entre autres la page : http://fr.wikibooks.org/wiki/Programmation_C_Pr%C3%A9process(...)
et libre à toi d'en trouver d'autres si tu veux te documenter sur le sujet.
Tout ça pour dire : vouloir savoir, c'est bien, attendre que ça tombe tout cuit, ça l'est moins. Quand tu as quelques pistes, si tu ne fais pas l'effort de fouiller par toi même, tu ne vas pas aller bien loin :-<
bon courage quand même.