Префикс "wcs" и "_w" и "_mbs" в Visual Studio
Меня немного смущает различие в функциях, которые определены с / без префикса wcs/_w/_mbs.
Например:
- Еореп () _ wfopen ()
На мсдн дано что:
Функция fopen открывает файл, указанный в имени файла. _wfopen - широкоформатная версия fopen; аргументы _wfopen - строки широких символов. В противном случае _wfopen и fopen ведут себя одинаково.
Я просто сомневался, есть ли какая-либо зависимость платформы от окон, связанная с добавлением префикса "_w".
- зЬгср (), wcscpy() _ mbscpy()
На мсдн дано что:
wcscpy и _mbscpy - это, соответственно, широкие и многобайтовые версии strcpy.
Опять же есть сомнение, если добавление "wcs" или "_mbs" зависит от платформы.
РЕДАКТИРОВАТЬ:
- Является ли функция WideCharToMultiByte зависимой от платформы?
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.
Вот почему в начале стоит подчеркивание: имена с начальным подчеркиванием зарезервированы для специфических для реализации вещей.