VisualC の変更点   


* Visual C のメモ [#c46e1ffa]

** primitive 型 [#td703abb]
|char          |-128 〜 127   |1byte(java は 2)|
|unsigned char | 0   〜 255   |1byte|
|short         |-32768 - 32767|2byte|
|unsigned short| 0 〜 65535   |2byte|
|wchar_t       |      〃      |2byte|
|int           |-2147483648-2147483647              |4byte|
|long          |              |8byte|
|long          |              |4byte|
|long long     |              |8byte|
|__int64       |              |8byte|
|double        |              |8byte|

** ラッパ [#j6741d81]
|DWORD         |unsigned long |8byte|
|LONGLONG      |__int64       |8byte|

** 文字列 [#x9b3334a]
*** W系 (ワイド文字) = UNICODE [#x218af97]
- 主に新しい処理系ではこちらが使われる
- 1文字に必ず2バイト使う( 半角の 'A' でも 2byte )
- 2byte なので基本型はshort
| 型          | 実体                   | 構文                      |書き換え|
| wchar_t*    | unsigned short*        | wchar_t* str  = L"A漢字"; |可      |
| WCHAR*      | unsigned short*        | WCHAR*        = L"A漢字"; |可      |
| LPWSTR      | unsigned short*        | LPWSTR        = L"A漢字"; |可      |
| LPCWSTR     | const unsigned short*  | LPCWSTR       = L"A漢字"; |不可    |
※ Lマクロは明示的に Unicode にしてしまうが、後述の T マクロでも適切に代入はされる

*** A系 (マルチバイト文字)  SJIS等 [#b9485c14]
- 主に古い処理系ではこちらが使われる
- 半角は 1バイト 全角は 2バイトを使って表す
- 1byte なので 基本型は char 
| 型          | 実体        | 構文                         |書き換え|
| char*       | char*       | char*        str  = "A漢字"; |可      |
| const char* | const char* | const char * str  = "A漢字"; |不可    |
| LPSTR       | char*       | LPSTR        str  = "A漢字"; |可      |
| LPCSTR      | const char* | LPCSTR       str  = "A漢字"; |不可    |

*** 汎用型 TCHAR [#y51fe96e]
- W系とA系でプログラムが異なると汎用性がないため、defineで両方使えるようにする仕組み
- UNICODE が宣言されていたら wchar_t(2byte)に、それ以外ならchar(1byte)になる
| TCHAR       | char / wchar_t | |
| CString     | TCHAR*         | const char からも作れる|
| LPTSTR      | TCHAR*         | |
| LPCTSTR     | const TCHAR*   | |


*** マクロ [#wbb3b911]
- W系とA系のコードの互換のためにさまざまな変換関数やマクロがある

| L"ほげABCほげ"| wchar_t* | 半角 A 等も2バイトを使う文字になる|
| TEXT(), _T    | TCHAR*   | TCHAR型に変換 (処理系によってchar/wchar_t が変わる)|

** 変換 [#yb3b8046]
*** Unicode -> MBCS(MultiByte) [#e2ded000]
- WideCharToMultiByte 
- CAtlString

*** MBCS(MultiByte) -> Unicode [#a9af8505]