为啥函数_wtoi中的wtoi之前有一个下划线,哪个ansi版本是atoi?

Posted

技术标签:

【中文标题】为啥函数_wtoi中的wtoi之前有一个下划线,哪个ansi版本是atoi?【英文标题】:Why there is a underline before wtoi in function _wtoi which ansi version is atoi?为什么函数_wtoi中的wtoi之前有一个下划线,哪个ansi版本是atoi? 【发布时间】:2014-06-03 17:05:49 【问题描述】:

你好!迷惑了我好久!

很久很久以前,只有atoi的ansi版本。

现在(也是很久很久以前)有一个宽字符版本。

但是为什么宽字符版本在wtoi之前有一个uderline('_')?

谁能告诉我为什么? 谢谢:)

【问题讨论】:

因为微软把它放在那里——没有其他原因。这是他们的功能,所以他们可以随心所欲地使用它; wtoi()_wtoi() 都不是标准化的,事实上,微软除外。 【参考方案1】:

在大多数情况下,以下划线开头的函数是实现添加;它们不是 C 标准库的一部分。 (也有例外,例如 _Exit 是 C 标准库的一部分,尽管它尚未在 Visual C++ 实现中实现。)以下划线开头的标识符是 reserved in the global namespace,因此它们用于非标准扩展避免与用户定义的名称冲突。

至于为什么 C 标准库中没有 wtoi:当宽字符函数被添加到 C 标准库中时,人们了解到 atoi 接口存在缺陷,因为 there is no way to detect whether the conversion succeeded or failed。

不要使用atoi_wtoi。相反,使用更可取的strtolwcstol 函数,它们都是C 标准库的一部分。 (对于其他类型还有其他类似命名的转换函数,例如strtofwcstof 转换为floatstrtoullwcstoull 转换为unsigned long long。)

【讨论】:

【参考方案2】:

Microsoft 提供函数_atoi_l, _wtoi, _wtoi_l 作为供应商特定的扩展。它们不是标准的 C/C++ 库函数。它们有许多这样的供应商特定函数,其名称源自标准 C/C++ 库函数。

【讨论】:

为什么标准C/C++库不提供widechar版本? @NorSDNorSD 好问题。我不知道答案。

以上是关于为啥函数_wtoi中的wtoi之前有一个下划线,哪个ansi版本是atoi?的主要内容,如果未能解决你的问题,请参考以下文章

MFC随机数

学习:访问对话框的七种方法

MFC,CString与intdouble 转换

请问vc中为啥有的函数前缀为下划线,有的函数无下划线?两者有啥区别?

字符串中的非整数数字并使用 atoi

Python 中的函数的双下划线“__”