Рекомендуем использовать Visual Studio 2017

/Zc:wchar_t (wchar_t – это собственный тип)

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

Разбор wchar_t как встроенного типа в соответствии со стандартом C++. По умолчанию параметр /Zc:wchar_t включен.

/Zc:wchar_t[-]  

Если параметр /Zc:wchar_t включен, wchar_t сопоставляется собственному специальному типу __wchar_t Microsoft. Если указан параметр /Zc:wchar_t- (со знаком минус), wchar_t сопоставляется объявлению typedef для типа unsigned short. (В Visual C++ 6.0 и ранее тип wchar_t не был реализован как встроенный тип, а объявлялся в файле wchar.h как typedef для unsigned short.) Не рекомендуется использовать /Zc:wchar_t-, поскольку стандарт C++ требует, чтобы тип wchar_t был встроенным типом. Использование версии typedef может вызывать проблемы переносимости. Если при обновлении с более ранней версии Visual C++ возникает ошибка компилятора C2664 в связи с тем, что код пытается выполнить неявное преобразование типа wchar_t в тип unsigned short, рекомендуется изменить код, чтобы устранить ошибку, но не менять значение параметра /Zc:wchar_t-.

Microsoft реализует тип wchar_t как двухбайтовое значение без знака. Дополнительные сведения о wchar_t см. в разделах Диапазоны типов данных и Фундаментальные типы.

При создании нового кода, который должен взаимодействовать со старым кодом, в котором по-прежнему используется версия typedef типа wchar_t, создайте перегруженные версии для вариантов unsigned short и __wchar_t типа wchar_t, чтобы код можно было связать как с кодом, скомпилированным с параметром /Zc:wchar_t, так и с кодом, скомпилированным без этого параметра. В противном случае будет необходимо предоставить две различных сборки библиотеки — одну с включенным параметром /Zc:wchar_t, вторую — с выключенным. Даже в этом случае рекомендуется произвести сборку старого кода с использованием компилятора, который используется для компиляции нового кода. Никогда не смешивайте двоичные файлы, скомпилированные разными компиляторами.

Если указан параметр /Zc:wchar_t, определены символы _WCHAR_T_DEFINED и _NATIVE_WCHAR_T_DEFINED. Для получения дополнительной информации см. Предустановленный макрос.

Поскольку теперь по умолчанию параметр /Zc:wchar_t включен, если в коде используются глобальные функции COM компилятора, рекомендуется заменить явные ссылки на comsupp.lib (из директивы comment pragma или из командной строки) ссылками на comsuppw.lib или comsuppwd.lib. (Если необходимо выполнять компиляцию с параметром /Zc:wchar_t-, используйте comsupp.lib.) Если включен файл заголовка comdef.h, правильная библиотека задается автоматически. Дополнительные сведения о поддержке COM компилятором см. в разделе Поддержка компилятора COM.

При компиляции кода C тип wchar_t не поддерживается. Дополнительные сведения о вопросах соответствия, связанных с Visual C++, см. в разделе Нестандартное поведение.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Работа со свойствами проектов.

  2. В левой области разверните узел Свойства конфигурации, C/C++, затем выберите Язык.

  3. Измените значение свойства Считать WChar_t встроенным типом.

Установка данного параметра компилятора программным способом

/Zc (соответствие)

Показ: