Variadic Makros mit 0 Argumenten in C99

Ich habe einige debugging-code, der wie folgt aussieht:

#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
void __my_error(const char*loc, const char *fmt, ...);
#define my_error(fmt, ...) __my_error(AT, fmt, ##__VA_ARGS__)

Den letzten makro verwendet wird, so kann ich das einfügen die Lage in der debug-Ausgabe, wo der Fehler aufgetreten ist. Allerdings, wenn ich rufen Sie die Funktion wie folgt:

my_error("Uh oh!");

Ich würde wie mein code C99, so finde ich, wenn dieses kompiliert, bekomme ich die folgende Fehlermeldung:

error: ISO C99 requires rest arguments to be used

Ich weiß, ich kann dies lösen, indem Sie ändern den Aufruf

my_error("Uh oh!", NULL);

Aber gibt es irgendeinen Weg, um diesen look weniger hässlich? Danke!

InformationsquelleAutor Michael Mior | 2010-08-26
Schreibe einen Kommentar