2017-06-22 22 views
0

私は以下の関数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のようにそれを呼び出すことができます

+0

あなたはvariadicマクロが必要ですね。 –

+1

なぜマクロを使用したいのですか?関数でも同様にマクロを使用しないでください!そして、マクロの最初のバージョンはミスリーディングであり、コードを難読化します。 – Olaf

+0

'func()'の定義を提供してください。 –

答えて

-1

:オラフで指摘したように

、これが奨励されていないと置き換えることができ直接関数呼び出し

+0

この質問は、可変数の引数を使用することについては何も言いません。与えられたマクロが必要ではないとしても、それで強く落胆します。 – Olaf

+0

その点を明確にするために編集しました。 – lapinozz

+1

@lapinozz:彼はCではなくCで質問をタグ付けしました。 –

関連する問題