2016-10-16 18 views
4

Cプリプロセッサにはstringificationという機能があります。これは、マクロパラメータから(狭い)文字列リテラルを作成できる機能です。このように使用することができます:C/C++プリプロセッサのマクロ引数の文字列化への変換

#define PRINTF_SIZEOF(x) printf("sizeof(%s) == %d", #x, sizeof(x)) 
/*         stringification ^^   */ 

使用例:

PRINTF_SIZEOF(int); 
が...印刷することがあります

sizeof(int) == 4 

がから広い文字列リテラルを作成する方法マクロパラメータ?つまり、WPRINTF_SIZEOFはどのように実装できますか?マクロ引数からワイド文字列リテラルを製造するために

#define WPRINTF_SIZEOF(x) wprintf(<what to put here?>) 
+2

自己応答は結構ですが、この

WPRINTF_SIZEOFは、次のように定義することができますそれ以前に何度も答えられ、議論されてきました。ここで1つを参照してください:http://stackoverflow.com/questions/216875/what-are-the-applications-of-the-preprocessor-operator-and-gotchas-to-conside –

+1

私は実際に詐欺を見つけることができません。 –

+0

@ P.P。私はあなたのポイントを見ることができません。提供された質問が重複していると述べると、私は強く反対します。それ以外の場合は、複製物へのリンクを提供してください。 – cubuspl42

答えて

4

、あなたはconcatenationで文字列化を結合する必要があります。 (間違いなく)あなたはヘルパーマクロにこのトリックを抽出することができ、可読性を高めるために、

#define WPRINTF_SIZEOF(x) wprintf(L"sizeof(%s) == %d", L ## #x, sizeof(x)) 
/*           concatenation ^^ ^^ stringification */ 

#define WSTR(x) L ## #x 
#define WPRINTF_SIZEOF(x) wprintf(L"sizeof(%s) == %d", WSTR(x), sizeof(x)) 
+0

btwおそらくそこに '\ n'が必要です! –

関連する問題