Visualization Tool Kit(VTK)など

charとwchar_t

char : multi-byte character set
wchar_t : unicode character set

MFCにおけるエイリアス

LPSTR,LPCSTR,LPCTSTRなど非常に直感的でないエイリアスが使われている.定義はwinnt.hにある.
LP(long pointer)-C(const)-T(template)-STR(string)と分解される.
templateのTは言語仕様のテンプレートではなくifdefによるmulti-byte character setとUnicode character setの自動的振り分けである.

const char*/const wchar_tのままでいいと思うが下記のtypedefをする.逆に難解になる.
  1. typedef const char* LPCSTR;
  2. typedef const wchar_t* LPCWSTR;

ユニコードの場合,wchar_tをTCHAR,LPCWSTRをLPCTSTRとする.
  1. typedef wchar_t TCHAR
  2. typedef LPCWSTR LPCTSTR

マルチバイトの場合,charをTCHAR,LPCSTRをLPCTSTRとする.
  1. typedef char TCHAR
  2. typedef LPCSTR LPCTSTR

他にも多くのエイリアスが存在するが同じことなので割愛する.

リテラルにおけるキャラクターセットの指定

  1. "str" : const char*
  2. L"str" : const wchar_t*
  3. _T("str"), _TEXT("str") : プロジェクトの設定による //MFC定義マクロ

以上より,MFC依存部分でファイル名等ではLPCTSTR,リテラルでは_T(x)マクロを使用することで
キャラクターセットの設定に関係なくコンパイルできるコードとなることが期待される.

両対応の注意

LPCTSTRやTCHARはプロジェクトの設定に応じてcharとwchar_tを使い分けるものであるが,
これはプリプロセッサの段階で決定される静的なものである.
すなわちテンプレートのようにコンパイル時に型が決定されたり,代入される時に動的に決定されるものではない.

//use Multi-byte character set
LPCTSTR text = L"ユニコード文字列";
//cannot convert from 'const wchar_t [9]' to 'const char *'
は不可である.

_tprintfも両対応であるが,どちらの設定でもコンパイルできるという意味での両対応であり,
どちらのキャラクターセットでも表示できるという意味ではない.

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

#include<memory> #include<string> #include<sstream> #include<algorithm> #include<functional> #include<numeric>

Media Foundation

【メニュー編集】
Wiki記法ガイド

メンバーのみ編集できます