2012-06-23 3 views
7

与えられたパラメータの名前と値を出力するのに役立つマクロが必要です。それは次のコードのようなものです。 AA: Hello\n BB: World\nC/C++でこの関数を実行するには

をしかし、明らかにそうではありません。

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf("input_param: %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

私は結果を期待しています。 誰でも私を修正できますか?ありがとう。

+1

なぜあなたはこれを実行したときに何が起こるか..「しかし、明らかにそうではありませんか」? – Levon

+0

@ Levon "input_param:Hello \ ninput_param:World \ n" –

+0

@ R.MartinhoFernandes情報をありがとう。 – Levon

答えて

12

#でマクロ名を文字列化する必要があります。これはassert()が同様にどのように動作するかです:

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf(#input_param ": %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

私はこのようにそれを書いた場合、それはより明確にすることがあります。

#define PRINT(input_param) printf("%s: %s\n", #input_param, (input_param)) 
+0

素晴らしい!どうもありがとう! –

+1

もう一つは 'PRINT(bar%foo)'のような災害に対して警戒するものです。 – Dave

+0

それは痛いわけではありませんが、引数として渡されるマクロパラメータの周りにカンマを含めることができないので、括弧は必要ありません。 –

関連する問題