Префикс "wcs" и "_w" и "_mbs" в Visual Studio

Меня немного смущает различие в функциях, которые определены с / без префикса wcs/_w/_mbs.
Например:

  • Еореп () _ wfopen ()
    На мсдн дано что:

Функция fopen открывает файл, указанный в имени файла. _wfopen - широкоформатная версия fopen; аргументы _wfopen - строки широких символов. В противном случае _wfopen и fopen ведут себя одинаково.

Я просто сомневался, есть ли какая-либо зависимость платформы от окон, связанная с добавлением префикса "_w".

  • зЬгср (), wcscpy() _ mbscpy()
    На мсдн дано что:

wcscpy и _mbscpy - это, соответственно, широкие и многобайтовые версии strcpy.

Опять же есть сомнение, если добавление "wcs" или "_mbs" зависит от платформы.

РЕДАКТИРОВАТЬ:

WideCharToMultiByte - это не функция времени выполнения C, это API-интерфейс Windows, поэтому он зависит от платформы

  • Точно так же функция wcstombs_s также зависит от платформы?

Он был нестандартным, но был стандартизирован в приложении К11 к К.

2 ответа

Решение

wcs* функции как wcscpy являются частью стандартной библиотеки C _wfopen функция и прочее _w* функции являются расширениями, как и многобайтовые строковые функции, такие как _mbscpy,

По большей части функции Visual C++ C Runtime (CRT), которые имеют начальное подчеркивание, являются расширениями; функции, которые не имеют начального подчеркивания, являются частью стандартной библиотеки C.

Существует два основных исключения, где расширения могут не иметь начальных подчеркиваний:

  • Существует несколько функций расширения, объявленных с префиксом подчеркивания, которые имеют псевдонимы без префиксов для обратной совместимости с исходным кодом. Эти псевдонимы устарели, и если вы попытаетесь их использовать, вы получите предупреждение об исключении устаревания (C4996).

  • Есть _sнадежные альтернативные функции для некоторых функций стандартной библиотеки C, например scanf_s, Они объявлены по умолчанию, но их объявления могут быть подавлены путем определения макроса __STDC_WANT_SECURE_LIB__ иметь значение 0.

    (Эти функции были фактически добавлены в C11 в дополнительном Приложении K, но обратите внимание, что есть несколько различий между тем, что указано в стандарте C, и тем, что реализовано в Visual C++. Различия связаны с исторической случайностью.)

wcscpy является стандартным. _mbcscpy специфично для MS VC.

Вот почему в начале стоит подчеркивание: имена с начальным подчеркиванием зарезервированы для специфических для реализации вещей.

Другие вопросы по тегам