Visual Studio中的"wcs"和"_w"以及"_mbs"前缀

iaj*_*jnr 0 c++ msdn tr24731 visual-studio visual-c++

对于使用/不使用wcs/_w/_mbs前缀定义的函数的差异,我有点困惑.
例如:

  • fopen(),_ wfopen()
    在msdn上给出:

fopen函数打开由filename指定的文件._wfopen是fopen的宽字符版本; _wfopen的参数是宽字符串.否则,_wfopen和fopen表现相同.

我只是怀疑是否有任何平台依赖于与添加"_w"前缀相关联的窗口.

  • strcpy(),wcscpy(),_ mbscpy()
    在msdn上给出:

wcscpy和_mbscpy分别是strcpy的宽字符和多字节字符版本.

如果"wcs"或"_mbs"的添加是依赖于平台的,则再次存在疑问.

编辑:

  • WideCharToMultiByte 功能是否也依赖于平台?

WideCharToMultiByte不是C运行时函数,它是Windows API,因此它取决于平台

  • 同样是wcstombs_s 函数还依赖于平台吗?

它是非标准的,但在C11附件K中标准化.

Jam*_*lis 7

这些wcs*功能wcscpy是C标准库的一部分.该_wfopen功能和其他_w*功能的扩展,因为是多字节字符串函数一样_mbscpy.

在大多数情况下,具有前导下划线的Visual C++ C运行时(CRT)函数是扩展; 没有前导下划线的函数是C标准库的一部分.

有两个主要的例外情况,其中扩展可能没有前导下划线:

  • 有几个扩展函数,使用下划线前缀声明,具有前缀别名,用于向后源兼容.这些别名已弃用,如果您尝试使用它们,您将获得可抑制的弃用警告(C4996).

  • _s某些C标准库函数有一些固定的安全替代函数,例如scanf_s.这些是默认声明的,但可以通过将宏定义__STDC_WANT_SECURE_LIB__为值0 来抑制它们的声明.

    (这些功能实际上已添加到可选附件K中的C11中,但请注意,C标准中指定的内容与Visual C++实现的内容之间存在一些差异.这些差异是由于历史事故造成的.)