gpt4 book ai didi

c++ - Visual Studio 中的 "wcs"和 "_w"和 "_mbs"前缀

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:53 25 4
gpt4 key购买 nike

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

  • fopen(),_wfopen()
    在 msdn 上给出:

The fopen function opens the file that is specified by filename. _wfopen is a wide-character version of fopen; the arguments to _wfopen are wide-character strings. Otherwise, _wfopen and fopen behave identically.

我只是怀疑添加“_w”前缀是否对 Windows 有任何平台依赖性。

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

wcscpy and _mbscpy are, respectively, wide-character and multibyte-character versions of strcpy.

再次怀疑“wcs”或“_mbs”的添加是否依赖于平台。

编辑:

  • WideCharToMultiByte function也依赖于平台?

WideCharToMultiByte is not a C Runtime function, it's a Windows API,hence it is platform dependent

  • 同样是wcstombs_s function也依赖于平台?

It was nonstandard but was standardized in C11 Annex K.

最佳答案

wcs* 函数如wcscpy 是C 标准库的一部分。 _wfopen 函数和其他 _w* 函数是扩展,_mbscpy 等多字节字符串函数也是如此。

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

有两个主要的异常(exception),其中扩展名可能没有前导下划线:

  • 有几个扩展函数,使用下划线前缀声明,它们具有无前缀的别名以实现向后源兼容性。这些别名已弃用,如果您尝试使用它们,您将收到可抑制的弃用警告 (C4996)。

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

    (这些函数实际上是在可选的 Annex K 中添加到 C11 中的,但请注意,指定的内容之间存在一些差异在 C 标准中以及由 Visual C++ 实现的内容。这差异是由于 a historicalaccident .)

关于c++ - Visual Studio 中的 "wcs"和 "_w"和 "_mbs"前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20605094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com