Heim >Backend-Entwicklung >C++ >Wie kann ich die Anzahl der Argumente in einem variadischen C-Makro bestimmen?
Bestimmen der Anzahl von Argumenten in variadischen Makros mithilfe von VA_ARGS des C-Präprozessors
Variadische Makros in C ermöglichen die Verwendung von eine beliebige Anzahl von Argumenten. Allerdings kann es schwierig sein, die Anzahl der an ein Variadic-Makro übergebenen Argumente zu bestimmen. In diesem Artikel wird eine einfache und effiziente Lösung mit dem Präprozessormakro VA_ARGS untersucht.
Grundlegendes zu VA_ARGS
VA_ARGS ist ein integriertes Präprozessormakro, das sich auf die tatsächlichen Argumente erweitert, die an a übergeben werden Variadisches Makro. Es liefert jedoch keine Informationen über die Anzahl der Argumente.
Argumente mithilfe der Größe eines ganzzahligen Arrays zählen
Um die Anzahl der Argumente in einem variadischen Makro zu bestimmen, haben wir kann das Verhalten von Array-Größen im C-Präprozessor ausnutzen. Das folgende Makro, NUMARGS(), verwendet diese Technik:
#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__})/sizeof(int))
Dieses Makro wird auf die Größe eines Arrays erweitert, das alle an es übergebenen Argumente enthält, geteilt durch die Größe einer Ganzzahl. Der resultierende Wert ist die Anzahl der Argumente.
Beispielverwendung
Betrachten Sie das folgende Makro, SUM(), das die Summe seiner Argumente berechnet:
#define SUM(...) (sum(NUMARGS(__VA_ARGS__), __VA_ARGS__))
Um SUM() zu verwenden, würden wir es mit einer variablen Anzahl von Argumenten aufrufen, z also:
SUM(1); SUM(1, 2); SUM(1, 2, 3);
Das Makro NUMARGS() zählt die Anzahl der Argumente und übergibt sie zusammen mit den Argumenten an die Funktion sum().
Umgang mit leeren Argumentlisten
Standardmäßig schlägt das Makro NUMARGS() fehl, wenn es mit einer leeren Argumentliste aufgerufen wird. Um dies zu beheben, kann eine Variante des Makros mithilfe von GNU C-Erweiterungen definiert werden:
#define NUMARGS(...) (sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1)
Diese Variante ermöglicht eine leere Argumentliste und zählt die Anzahl der Argumente in allen Fällen korrekt.
Fazit
Das Präprozessormakro VA_ARGS kann effizient genutzt werden Zählen Sie die Anzahl der Argumente in Variadic-Makros. Durch die Kombination dieser Technik mit der Manipulation der ganzzahligen Array-Größe können wir nützliche Makros für den Umgang mit einer variablen Anzahl von Argumenten in C entwickeln.
Das obige ist der detaillierte Inhalt vonWie kann ich die Anzahl der Argumente in einem variadischen C-Makro bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!