Makro-Parameter ...
Es ist möglich, Makros zu definieren, welche eine variable Anzahl an Argumenten erwarten. Diese sogenannt variadischen
Makros werden mit drei Auslassungspunkten ...
definiert, worauf die damit vertretenen Argumente in der Makrodefinition mit dem vordefinierten Makro __VA_ARGS__
angesprochen werden können.
Details
Es sei darauf hingewiesen, dass in C und C++ nicht nur variadische Makros, sondern auch variadische Funktionen existieren.
Die drei Auslassungspunkte werden im Englischen als ellipsis
bezeichnet. Auf Deutsch entspricht dies dem Begriff Ellipse
.
Anstelle des Makros __VA_ARGS__
kann auch ein eigener Name für die zusätzlichen Argumente vergeben werden. Dieses Feature ist erst ab C++ beschrieben, heutige Compiler erlauben dies jedoch auch für C-Dateien. Die Benennung wird erreicht, indem bei der Parameterliste der Makrodefinition vor die Auslassungspunkte ...
der gewünschten Namen angegeben wird:
Wird ein variadisches Makro ohne die zusätzlichen Argumente verwendet, so werden diese leider nicht automatisch weggelassen, ein Aufruf obigen Makros kann somit zu einem Syntax-Fehler führen, wie in der Übersetzung der folgenden Zeile durch den Preprozessor zu sehen ist:
Um diesen Fehler zu vermeiden, bietet GCC eine Spezial-Version des doppelten Hash-Zeichens ##
, welches bewirkt, dass bei nicht vorhandene Argumente variadischen Makros automatisch zusammen mit dem vorangehenden Komma (funktioniert nur mit Komma!) entfernt werden, worauf der Preprozessor die Zeile korrekt umsetzt: