Macro di Variadic

Le macro di Variadic sono macro del tipo di funzione che contengono un numero variabile di argomenti.

Note

Per utilizzare le macro variadic, ellissi possono essere specificati come argomento formale finale in una definizione di macro e l'identificatore di sostituzione __VA_ARGS__ può essere utilizzato nella definizione per inserire argomenti aggiuntivi.__VA_ARGS__ viene sostituito da eventuali argomenti corrispondenti agli ellissi, incluse le virgole tra loro.

Lo standard c specifica che almeno un argomento deve essere passato a puntini di sospensione, per garantire che la macro non risolverà a un'espressione con una virgola finale.L'implementazione di Visual C++ da una virgola finale se nessun argomento viene passato a puntini di sospensione.

Esempio

// variadic_macros.cpp
#include <stdio.h>
#define EMPTY

#define CHECK1(x, ...) if (!(x)) { printf(__VA_ARGS__); }
#define CHECK2(x, ...) if ((x)) { printf(__VA_ARGS__); }
#define CHECK3(...) { printf(__VA_ARGS__); }
#define MACRO(s, ...) printf(s, __VA_ARGS__)

int main() {
   CHECK1(0, "here %s %s %s", "are", "some", "varargs1(1)\n");
   CHECK1(1, "here %s %s %s", "are", "some", "varargs1(2)\n");   // won't print

   CHECK2(0, "here %s %s %s", "are", "some", "varargs2(3)\n");   // won't print
   CHECK2(1, "here %s %s %s", "are", "some", "varargs2(4)\n");

   // always invokes printf in the macro
   CHECK3("here %s %s %s", "are", "some", "varargs3(5)\n");

   MACRO("hello, world\n");
   // MACRO("error\n", EMPTY);   would cause C2059
}
  

Vedere anche

Riferimenti

Macro (C/C++)