Variadic-Makros

Variadic-Makros sind FUNCTION ähnliche Makros, die eine variable Anzahl von Argumenten enthalten.

Hinweise

Um variadic Makros verwenden, werden die Auslassungszeichen als die endgültige formalen Argument in einer Makrodefinition angegeben werden, und die Ersetzung wird in der Definition __VA_ARGS__ Bezeichner verwendet werden, um die zusätzlichen Argumente eingefügt werden soll.__VA_ARGS__ wird von allen Argumenten, die die Auslassungspunkte übereinstimmen, einschließlich Kommas zwischen ihnen ersetzt.

Der C-Standard gibt an, dass mindestens ein Argument an den Auslassungszeichen übergeben werden muss, um sicherzustellen dass das Makro nicht auf einen Ausdruck mit einem nachfolgenden Komma auflöst.Die Visual C++-Implementierung unterdrückt ein nachfolgendes Komma, wenn keine Argumente für den Auslassungszeichen übergeben werden.

Beispiel

// 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
}
  

Siehe auch

Referenz

Makros (C/C++)