各文字の前にLを付けずにC ++でワイド文字列リテラルを使用する方法

StackOverflow https://stackoverflow.com/questions/260125

  •  06-07-2019
  •  | 
  •  

質問

あなたは私の無知を許さなければならないでしょうが、私はc ++でワイド文字セットを使用することに慣れていませんが、各リテラルの前にLを置くことなくc ++でワイド文字列リテラルを使用できる方法はありますか?

もしそうなら、どのように?

役に立ちましたか?

解決

いいえ、ありません。 Lプレフィックスを使用する必要があります(またはUnicode用にコンパイルされたときにとにかくLに展開されるVC ++では_T()などのマクロ)。

他のヒント

新しいC ++ 0x標準では、これを行う別の方法が定義されています。
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

関連するメモについて。 私は次のことをしようとしています

#define  get_switch( m )   myclass::getSwitch(L##m)

これは展開されるマクロです

get_switch(isrunning)

into

myclass::getswitch(L"isrunning")

これはc ++ visualstudio 2008で正常に動作します

しかし、Mac Xcode(iPhoneの場合)で同じコードをコンパイルすると、エラーが発生します:

error: 'L' was not defined in this scope.

編集:ソリューション

#define  get_switch( m )   myclass::getSwitch(L ## #m)

これは、vc ++とmac xcode(gcc)の両方で動作します

なぜ文字列リテラルの先頭にLを付けたくないのですか? Lのない文字列はANSI文字列( const char * )、Lの文字列はワイド文字列( const wchar_t * )です。 TEXT()マクロがあります。これは、文字列リテラルをANSIにするか、現在のプロジェクトに応じてワイド文字列を作成し、Uncodeを使用するように設定します。


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

_T()マクロもあります。これは TEXT()と同等です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top