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.
Man kann anstelle des Makros __VA_ARGS__ einen eigenen Namen für die variadischen Argumente vergeben. Dieses Feature ist erst ab C++ beschrieben, heutige Compiler erlauben dies jedoch auch für C-Dateien. Die Benennung wird erreicht, indem man bei der Parameterliste der Makrodefinition vor die Auslassungspunkte ... den gewünschten Namen angibt:
|
Verwendet man ein variadisches Makro ohne die zusätzlichen Argumente, so werden diese leider nicht automatisch weggelassen, ein Aufruf obigen Makros kann somit zu einem Syntax-Fehler führen, wie man in der Übersetzung der folgenden Zeile durch den Preprozessor sehen kann:
|
|
Um diesen Fehler zu vermeiden, bietet GCC eine Spezial-Version des doppelten Hash-Zeichens ##, welches bewirkt, dass nicht vorhandene variadische Argumente automatisch zusammen mit dem vorangehenden Komma (funktioniert nur mit Komma!) entfernt werden, worauf der Preprozessor die Zeile korrekt umsetzt:
|
|