Soweit ich weiß, können Sie in gcc etwas wie schreiben:
#define DBGPRINT(fmt...) printf(fmt);
Gibt es eine Möglichkeit, dies in VC++ zu tun?
Soweit ich weiß, können Sie in gcc etwas wie schreiben:
#define DBGPRINT(fmt...) printf(fmt);
Gibt es eine Möglichkeit, dies in VC++ zu tun?
Ja, aber erst seit VC++ 2005. Die Syntax für Ihr Beispiel würde lauten:
#define DBGPRINT(fmt, ...) printf(fmt, __VA_ARGS__)
Eine vollständige Referenz ist aquí .
Ja, Sie können dies in Visual Studio C++ in den Versionen 2005 und höher tun (nicht sicher über VS 2003). Werfen Sie einen Blick auf VA_ARGS . Sie können im Grunde so vorgehen:
#define DBGPRINTF(fmt, ...) printf(fmt, __VA_ARGS__)
und die variablen Argumente für das Makro werden als '...'-Arg an die Funktion übergeben, wo sie dann mit va_args ausgewertet werden können.
Es kann zu merkwürdigem Verhalten kommen bei VA_ARGS und die Verwendung von Makros. Weil VA_ARGS ist variabel, d.h. es kann 0 Argumente geben. Das kann dazu führen, dass Sie an einer Stelle, an der Sie es nicht beabsichtigt haben, ein Komma anhängen.
Das, wonach Sie suchen, heißt [variadische Makros]( http://msdn.microsoft.com/en-us/library/ms177415(VS.80).aspx)) .
Zusammenfassung des Links: ja, ab VC++ 2005 aufwärts.
Wenn Sie eigentlich keine der Funktionen von Makros benötigen ( __FILE__
, __LINE__
, Token-Pasting, etc.), sollten Sie in Erwägung ziehen, eine variadische Funktion zu schreiben, die stdargs.h
. Anstatt die printf()
kann eine variadische Funktion aufrufen vprintf()
um variable Argumentlisten weiterzugeben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.