我正在将 Windows 库移植到 Android(使用 GNU 标准 C++ 库选项 libstdc++-v3),VC 和 GNU 库之间似乎存在许多命名差异,例如:
-
_stricmp
叫做strcasecmp
instead
-
_unlink
叫做unlink
-
_scalb
叫做scalbn
-
_finite
叫做isfinite
-
_isnan
叫做isnan
-
_itoa
and itoa
GNU C++ 中似乎不存在
-
atoi
确实存在,但不存在atoi64
VC 和 GNU 库的文档暗示它们实现了“ISO”C++,例如,我可以从 VC2008 中得到一些关于不使用“ISO C++”名称的警告,例如:“警告 C4996: 'itoa':该项目的 POSIX 名称已被弃用。而是使用符合 ISO C++ 的名称:_itoa。”同样,GNU 手册说“GNU 标准 C++ 库 v3 是一个正在进行的项目,旨在实现 ISO 14882 标准 C++ 库”。
那么这些库是如何以这些不同的名称结束的呢?我怎样才能知道哪些名字更“标准”?
还有,有没有一个indexlibstdc++-v3 的任何地方,即库中所有函数的简单列表?我只能找到一个manual http://gcc.gnu.org/onlinedocs/libstdc++/和“源文档 http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/”,它似乎没有提供功能列表。
这与C++标准库关系不大。它与 C99 和 POSIX 有更多关系。
-
strcasecmp
是 libstdc++ 恰好实现的 POSIX 函数。 msvcrt 通常与 POSIX 保持一定距离。
-
unlink
类似——它是一个 POSIX 函数。
-
scalbn
是 C99 标准中函数的名称。 MSVC 不支持 C99。然而,scalbn
是 C++11 的一部分,所以我希望它最终会出现在 msvcrt 中。
-
isfinite
and isnan
都是C99。
-
itoa
既不是 C99 也不是 POSIX。这是一种只在夜间出现的奇怪野兽。
我还将指出其他几个人指出的内容:从技术上讲,在标准库中为实际上非标准的任何函数添加下划线前缀是更正确的。这就是 msvcrt 中下划线泛滥的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)