2012-11-07 7 views
14

次のように私の問題がある:Cプリプロセッサリテラル建設

私はそう

#define TITLE "Title" 

のようなマクロ編です。しかし、私はワイド文字バリアントに渡す必要があるときにインスタンスがある文字列リテラルを持っていますこの文字列のこれらの機能にL"Title"を渡すことができるようにしたい。当然、私は新しいマクロW_TITLETITLEで定義しようとしました。

私は運がありません。私のアプローチ(以下に記載)はすべて失敗しました。どのようにそのような魔法を達成できるのか教えてください。

+0

あなたはここで読むのが好きかもしれません:http://gcc.gnu.org/onlinedocs/cpp/Stringification.html – alk

答えて

11

はこのお試しください...私は

#define W_TITLE L##TITLE 
#define W_TITLE #L TITLE 
#define W_TITLE ##L TITLE 

を試してみました。しかし、それらはすべて失敗:あなたがしているものを得るために、中間マクロを通じて展開を強制する必要が

#define WIDEN_(exp) L##exp 
#define WIDEN(exp) WIDEN_(exp) 
#define TITLE   "Title" 
#define W_TITLE  WIDEN(TITLE) 

を探している。

#include <stdio.h> 

#define WIDEN_(exp) L##exp 
#define WIDEN(exp) WIDEN_(exp) 
#define TITLE   "Title" 
#define W_TITLE  WIDEN(TITLE) 

int main(int argc, char *argv[]) 
{ 
    printf("%s\n", TITLE); 
    wprintf(L"%ls\n", W_TITLE); 
    return 0; 
} 

結果:

Title 
Title 
+2

'coutの<<' ...それはいくつかあります奇妙な探しているCコード.... – Mike

+4

@マイケル笑。悲しい。今朝はコーヒーが足りません。 – WhozCraig

+0

@WhozCraig Brilliant!本当にありがとう! – StoryTeller