Ich habe die folgende Funktion foo()
und das Makro FOO(str)
.Makro innerhalb einer Funktion und Stringfication
void foo(const char *fmt, ...) {
va_list args;
va_start(args,fmt);
vsprintf(msgbuff,fmt,args);
va_end(args);
printf("%s\n",msgbuff);
}
#define FOO(str)\
foo str; // No need of brackets as they are coming in 'str'
habe ich das Makro wie unten zu nennen:
FOO(("My %s is %s\n","Name","Bala"));
Jetzt ist meine Anforderung ist:
Makro FOO(str)
sollte meine Funktion nicht aufrufen foo()
direkt, sondern sollte es durch eine andere Funktion aufrufen wie func()
.
Schließlich sollte mein Makro wie sein unter
#define FOO(str)\
func(#str) // Do I need to Stringizing str?
Meine Frage ist, wie kann ich Funktion aufrufen foo()
von innen func()
? Bitte schlagen Sie eine mögliche Implementierung vor.
Klingt, als ob Sie ein variadic Makro benötigen. –
Warum möchten Sie überhaupt ein Makro verwenden? Verwenden Sie niemals ein Makro, wenn eine Funktion das auch macht! Und die erste Version des Makros ist fehlleitend und verschleiert Ihren Code. – Olaf
Bitte geben Sie die Definition von 'func()' an. –