Ich mag die ein Makro verwenden möchten folgende:## __ VA_ARGS__ nicht Komma beim Schlucken, wenn Null args unter C99
#define x(...) y(a,##__VA_ARGS__,b)
zu erweitern, wie so:
x(); -> y(a,b);
x(1); -> y(a,1,b);
Mit -std=gnu99
, es funktioniert perfekt.
Mit -std=c99
jedoch sieht es wie folgt aus:
x(); -> y(a,,b);
x(1); -> y(a,1,b);
Die ##
macht keinen Unterschied - es ist nicht das Komma zu schlucken.
In anderen Verwendungen unter C99, z.B. #define x(a,...) y(a,##__VA_ARGS__)
, Komma-Schlucken funktioniert gut.
Was kann ich tun, wenn überhaupt, um das gewünschte Komma-Schluckverhalten unter clangs -std=c99
, entweder mit der GNU-Erweiterung ##
oder durch eine andere Methode zu bekommen?
Also, wie funktioniert das auf der Seite der Implementierung (d. H. Wie verwendet die Funktion die Variablenargumente)? – trojanfoe
@trojanfoe Danke für den Kommentar, aber das ist nicht im Rahmen dieser Frage. (Dies ist keine XY-Frage.) – Max
@trojanfoe Sure: Ich benutze dieses Makro, um 'a() 'aufzurufen, wenn es keine Argumente gibt, oder' b (x) 'wenn es ein Argument gibt:' GET_MACRO (_0 , ## __ VA_ARGS__, b, a) (__ VA_ARGS __) '. – Max