238 votes

Comment faire un variadic macro (nombre variable d'arguments)

Je veux écrire une macro en C qui accepte n'importe quel nombre de paramètres, pas un nombre spécifique

exemple:

#define macro( X )  something_complicated( whatever( X ) )

X est le nombre de paramètres

J'ai besoin de cela, car whatever est surchargée et peut être appelée à 2 ou à 4 paramètres.

J'ai essayé la définition de la macro deux fois, mais la deuxième définition a remplacé le premier!

Le compilateur, je suis en train de travailler avec g++ (plus précisément, mingw)

353voto

Alex B Points 34304

C99 façon, également soutenu par le compilateur VC++.

#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)

51voto

cmccabe Points 718

__VA_ARGS__) est le standard de la façon de le faire. N'utilisez pas de compilateur spécifique hacks si vous n'avez pas à.

Je suis vraiment ennuyé que je ne peux pas commenter sur le post original. En tout cas, C++ n'est pas un sur-ensemble de C. Il est vraiment idiot pour compiler votre code C avec un compilateur C++. Ne pas faire ce que Donny N'est pas fait.

32voto

eduffy Points 17061

Je ne pense pas que c'est possible, vous pourriez faux avec double parens ... aussi longtemps que vous n'avez pas besoin d'arguments individuellement.

#define macro(ARGS) some_complicated (whatever ARGS)
// ...
macro((a,b,c))
macro((d,e))

9voto

DarenW Points 7817

expliqué g++ ici, si elle est partie de C99 devrait donc fonctionner pour tout le monde

http://www.delorie.com/gnu/docs/gcc/gcc_44.html

exemple rapide:

#define debug(format, args...) fprintf (stderr, format, args)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X