16 Stimmen

Gibt es eine Möglichkeit, Makros mit einer variablen Argumentliste in Visual C++ zu schreiben?

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?

1voto

amarcruz Punkte 11

Für MSVC 7.1 (.NET 2003) funktioniert dies:

#if defined(DETAILED_DEBUG)
#define DBGPRINT fprintf
#else
__forceinline void __DBGPRINT(...){}
#define DBGPRINT __DBGPRINT
#endif

0voto

David Dolson Punkte 290

Das Folgende sollte funktionieren. (Siehe Link zu Variadische Makros )

(Das folgende Beispiel zeigt ein festes und ein variables Argument).

#  define DBGPRINTF(fmt,...) \
    do { \
        printf(fmt, __VA_ARGS__); \
    } while(0)

0voto

James Punkte 1865

Suche nach " VA_ARGS " und va_list in MSDN!

-2voto

kfh Punkte 323

Fast. Es ist aber noch hässlicher als das (und Sie wollen wahrscheinlich kein Semikolon am Ende des Makros haben:

#define DBGPRINT(DBGPRINT_ARGS) printf DBGPRINT_ARGS // note: do not use '(' & ')'

Zur Verwendung:

DBGPRINT(("%s\n", "Hello World"));

(es fehlte ein Paar Parens).

Ich bin mir nicht sicher, warum all die Negative, die ursprüngliche Frage nicht angeben, eine Version von VC + +, und variadic Makros sind nicht von allen Compilern unterstützt.

CodeJaeger.com

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.

Powered by:

X