为啥函数_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
。相反,使用更可取的strtol
和wcstol
函数,它们都是C 标准库的一部分。 (对于其他类型还有其他类似命名的转换函数,例如strtof
和wcstof
转换为float
和strtoull
和wcstoull
转换为unsigned long long
。)
【讨论】:
【参考方案2】:Microsoft 提供函数_atoi_l, _wtoi, _wtoi_l
作为供应商特定的扩展。它们不是标准的 C/C++ 库函数。它们有许多这样的供应商特定函数,其名称源自标准 C/C++ 库函数。
【讨论】:
为什么标准C/C++库不提供widechar版本? @NorSDNorSD 好问题。我不知道答案。以上是关于为啥函数_wtoi中的wtoi之前有一个下划线,哪个ansi版本是atoi?的主要内容,如果未能解决你的问题,请参考以下文章