私は以下の関数foo()
とマクロFOO(str)
を持っています。関数内のマクロと文字列
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'
私は以下のようなマクロを呼び出すために使用される:
FOO(("My %s is %s\n","Name","Bala"));
今私の要件は次のとおりです。
マクロFOO(str)
は、直接私の機能foo()
を呼び出すべきではありませんが、代わりに、それは別の関数を通してそれを呼び出す必要がありますfunc()
のようになります。
最後に私のマクロは
#define FOO(str)\
func(#str) // Do I need to Stringizing str?
私の質問は、どのように私はfunc()
内部から機能foo()
を呼び出すことができますされ下回るようにすべきですか? 可能性のある実装をお勧めします。
#define FOO(...) \
fun(__VA_ARGS__);
を使用して、この
EDITのようにそれを呼び出すことができます
あなたはvariadicマクロが必要ですね。 –
なぜマクロを使用したいのですか?関数でも同様にマクロを使用しないでください!そして、マクロの最初のバージョンはミスリーディングであり、コードを難読化します。 – Olaf
'func()'の定義を提供してください。 –