/Zc:wchar_t (wchar_t をネイティブ型として認識)
wchar_t
を、C++ 標準に従って組み込み型として解析します。
構文
/Zc:wchar_t[-]
解説
/Zc:wchar_t がオンの場合、wchar_t
は C++ としてコンパイルされたコード内の整数のビルトイン型のキーワードです。 /Zc:wchar_t- (マイナス記号付き) が指定されている、または C としてコンパイルされているコード内の場合、wchar_t
はビルトイン型ではありません。 代わりに、wchar_t
は正規ヘッダー stddef.h で unsigned short
の typedef
として定義されます。 (Microsoft の実装では、stddef.h に含まれる別のヘッダーや、その他の標準ヘッダーでそれを定義します。)
C++ 標準では wchar_t
がビルトイン型である必要があるため、/Zc:wchar_t- はお勧めしません。 typedef
バージョンを使用すると、移植性の問題が発生することがあります。 以前のバージョンの Visual Studio からアップグレードしているとき、コードで wchar_t
を unsigned short
に暗黙的に変換しようとしたために C2664 コンパイル エラーが発生した場合は、/Zc:wchar_t- を設定するのではなく、コードを変更してエラーを修正することをお勧めします。
/Zc:wchar_t オプションは C++ のコンパイルでは既定でオンになっており、C のコンパイルでは無視されます。 /permissive- オプションは、/Zc:wchar_t に影響しません。
Microsoft では、wchar_t
が 2 バイトの符号なしの値として実装されます。 Microsoft 固有のネイティブ型 __wchar_t
に割り当てられます。 wchar_t
の詳細については、「データ型の範囲」と基本型に関する記事を参照してください。
wchar_t
の typedef
バージョンが使用されている以前のコードと相互運用する必要があるコードを新しく記述する場合は、wchar_t
の unsigned short
バリエーションと __wchar_t
バリエーションの両方に対してオーバーロードを指定できます。これにより、新しいコードを、/Zc:wchar_t を使用してコンパイルされるコード、または使用せずにコンパイルされるコードとリンクできます。 それ以外の場合は、/Zc:wchar_t を使用するライブラリ ビルドと、使用しないライブラリ ビルドの 2 つの異なるビルドを指定する必要があります。 この場合も、以前のコードのビルドには、新しいコードをコンパイルするときに使用するコンパイラを使用することをお勧めします。 さまざまなコンパイラでコンパイルされたバイナリを混在させないでください。
/Zc:wchar_t が指定されると、_WCHAR_T_DEFINED シンボルと _NATIVE_WCHAR_T_DEFINED シンボルが定義されます。 詳細については、「 Predefined Macros」を参照してください。
コードでコンパイラ COM グローバル関数が使用されている場合は、/Zc:wchar_t が既定でオンになったため、comsupp.lib への明示的な参照 (comment プラグマからまたはコマンド ライン上) は、comsuppw.lib または comsuppwd.lib へのいずれかに変更することをお勧めします。 ( /Zc:wchar_t- でコンパイルする必要がある場合は、comsupp.lib を使用します)。comdef.h ヘッダー ファイルを含める場合は、適切なライブラリが指定されます。 コンパイラ COM サポートについては、「コンパイラ COM サポート」を参照してください。
ビルトイン型 wchar_t
は、C コードをコンパイルするときはサポートされません。 Visual C++ の準拠に関する問題の詳細については、「非標準動作」を参照してください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[言語] ページを選択します。
[Treat wchar_t as Built-in Type]\(wchar_t をビルトイン型として扱う\) プロパティを変更します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。TreatWChar_tAsBuiltInType