Après avoir lu VA_NARGcoller Token en C
j'ai essayé de mettre en œuvre la surcharge de fonctions en fonction du nombre d'arguments dans C en utilisant des macros. Maintenant, le problème est:
void hello1(char *s) { ... }
void hello2(char *s, char *t) { ... }
// PP_NARG(...) macro returns number of arguments :ref to link above
// does not work
#define hello(...) hello ## PP_NARG(__VA_ARGS__)
int main(void)
{
hello("hi"); // call hello1("hi");
hello("foo","bar"); // call hello2("foo","bar");
return 0;
}
J'ai lu this de C-faq. Mais ne pouvait toujours pas faire fonctionner ...
"ou" donc en effet. Il a besoin d'un autre niveau d'indirection pour le faire fonctionner. –
@John: oui, merci. J'utilise toujours ma propre version d'une macro de collage pour cela, donc j'ai du mal à me rappeler combien de niveaux d'indirection vous avez besoin si vous avez juste '##'. J'ai adapté ma réponse en conséquence. –
Merci cela fonctionne. mais BONJOUR ("foo") donne bonjour1; pas hello1 ("foo"). Mais j'ai l'idée ... – Nyan