Heim > Backend-Entwicklung > C++ > Wie kann ich die Anzahl der Argumente in einem variadischen C-Makro bestimmen?

Wie kann ich die Anzahl der Argumente in einem variadischen C-Makro bestimmen?

Linda Hamilton
Freigeben: 2024-12-25 14:48:14
Original
226 Leute haben es durchsucht

How Can I Determine the Number of Arguments in a C   Variadic Macro?

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))
Nach dem Login kopieren

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__))
Nach dem Login kopieren

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);
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage