Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
}