4

これは基本的な質問かもしれませんが、いくつかの理由でよくわかりません。

"Character Set"問題は、Visual Studioのプロパティとは実際には何なのかということです。(例:プロパティUse Unicode Character Setで 、Use Multi-Byte Character Set、 - のいずれかに設定できるもの)Not Set

Unicode が何であるかは大体知っていますが、なぜこのプロパティを設定する必要があるのでしょうか?

たとえばL"hello"、プロジェクトで文字列のタイプを設定して使用しないと意味がありませんか?

4

3 に答える 3

7

Visual Studio でオプションを設定するCharacter Setと、いくつかのプリプロセッサ シンボルが定義されます。

  • Unicode定義します_UNICODE
  • Use Multi-byte Character Set定義します_MBCS
  • Not Setこれらのいずれも定義しません。

ここで、SDK のヘッダー ファイルを調べると、次のようなものがたくさん表示されます。

#ifdef _UNICODE
#define GetDeltaInfo                        GetDeltaInfoW
#else
#define GetDeltaInfo                        GetDeltaInfoA
#endif /* _UNICODE */

W 関数と A 関数は次のとおりです。

BOOL
WINAPI
GetDeltaInfoA(
    __in LPCSTR lpDeltaName,
    __out LPDELTA_HEADER_INFO lpHeaderInfo
    );

/**
 * Gets header information for a delta accessed by Unicode file name.
 * @param lpDeltaName   Delta file name, Unicode.
 * @param lpHeaderInfo  Header information for given Delta.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaInfoW(
    __in LPCWSTR lpDeltaName,
    __out LPDELTA_HEADER_INFO lpHeaderInfo
    );

そのため、Unicode またはマルチバイトを設定することで、適切な機能セットを選択できます。

于 2013-09-23T12:50:09.710 に答える
4

たとえば、ワイド文字L"Hello"を作成するとします。それを使用するには、単一の文字に対して、またはを使用する必要があります。std::wstringwchar_t

Visual Studioでは、egL"Hello"を直接使用しないでください。代わりに、「文字セット」設定に応じて正しいことを行うTようなマクロを使用してください。またはの代わりにT("Hello")も使用する必要があります。ただし、Visual Studio 固有の拡張機能であるため、C++ 標準の文字列型はありませんが、たとえば次のことができます。TCHARcharwchar_t

typedef std::basic_string<TCHAR> tstring;

Unicode 文字セットを設定すると、コンパイラは#defineマクロでワイド文字列と文字_UNICODEを使用します。wchar_tマルチバイト文字が選択されている場合、 then_UNICODEは定義されず、代わりに定義され、_MBCS通常TCHARchar. どちらも使用しないことを選択した場合、マクロは定義されず、通常charが使用されます。

詳細については、このリンクなどを参照してください。

于 2013-09-23T12:49:44.533 に答える
1

Microsoft フレーバーの c ランタイム、および Windows API のヘッダーは、この設定に応じてマルチバイトまたはワイド char バリアントに評価されるいくつかのマクロと typedef を定義します。たとえば、

int _tmain(int argc, _TCHAR* argv[]);

_TCHAR は次のように定義されます (簡略化)。

#ifdef  _UNICODE
typedef wchar_t     _TCHAR;
#else
typedef char     _TCHAR;
#endif

このようにして、同じコードをマルチバイト ビルドとユニコード ビルドに使用できます。_UNICODE は「Use Unicode Character Set」を選択した場合に定義され、「Multi-Byte」を選択した場合は定義されません。

于 2013-09-23T12:53:16.490 に答える