Undefinierte Anzahl an Parameter
-
Frage:
Ich möchte ein Makro schreiben, welches mehrere Argumente erhalten soll (Ellipse)
und zwar zwei feste und dann undefiniert viele. In etwa so:#define max (x,y, ....) DoSomething...
Ist so etwas möglich? Und wenn ja, Wie?
-
ein Makro? wieso das?
-
Es soll vorhandener Code portiert werden. Dort wird dann die Schreibweise "args..." für undefinierte Anzahl an Parametern verwendet. Hier geht das nicht.
Daher will ich wissen, wie das geht.
-
mit einem Makro geht das afaik nicht, aber mit Funktionen:
int max(int a,...) { va_list args; va_start(args,a); int m=a,b; do { b=va_next(args,int); if(b>m) m=b; }while(b>0); return m; }
-
Ja, das mit Funktionen kenne ich. Mit Makros nicht.
-
Die einzige Idee, die mir dazu einfällt, ist das TRACE-Makro aus der MFC:
#ifdef _DEBUG void AfxTrace(LPTCSTR Format,...); #define TRACE ::AfxTrace #else inline void AfxTrace(LPCTSTR, ...) { } #define TRACE 1 ? (void)0 : ::AfxTrace #endif
PS: Wie sieht denn der zu portierende Code aus? Möglicherweise kannst du das auch ohne Makro lösen.
-
#define USB_ERROR_STR(x, format, args...) do {...}while(....)
Der Borland Compiler soll das wohl richtig übersetzen können.
Hier gibt 'args...' eine undefinierte Anzahl an Parametern an.
Ich weiß, dass man das notfalls auch als Funktion schreiben kann, jedoch wäre es einfacher gewesen, wenn man vielleicht eben nur was ändern könnte.