gpt4 book ai didi

c++ - 为什么 Windows 和 Linux 的标准库函数名称不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:52 25 4
gpt4 key购买 nike

我正在将一个 Windows 库移植到 Android(使用 GNU 标准 C++ 库选项,libstdc++-v3),VC 和 GNU 库之间似乎存在许多命名差异,例如:

  • _stricmp 被称为 strcasecmp 而不是
  • _unlink 被称为unlink
  • _scalb 称为 scalbn
  • _finite 被称为 isfinite
  • _isnan 被称为 isnan
  • _itoaitoa 在GNU C++ 中似乎不存在
  • atoi 确实存在,但atoi64
  • 不存在

VC 和 GNU 库的文档暗示它们实现了“ISO”C++,例如,我可以从 VC2008 中得到一些关于不使用“ISO C++”名称的警告,例如这个:“警告 C4996:' itoa':此项的 POSIX 名称已弃用。相反,请使用符合 ISO C++ 的名称:_itoa。”同样,GNU 的手册说“GNU 标准 C++ 库 v3 是一个正在进行的项目,用于实现 ISO 14882 标准 C++ 库”。

那么图书馆是如何以这些不同的名字结束的呢?如何判断哪些名称更“标准”?

此外,是否有 libstdc++-v3 的索引,即库中所有函数的简单列表?我只能找到一个 manual和“source documentation”,它似乎没有提供功能列表。

最佳答案

这与 C++ 标准库关系不大。它与 C99 和 POSIX 有更多关系。

  • strcasecmp 是 libstdc++ 恰好实现的 POSIX 函数。 msvcrt 通常与 POSIX 保持一定距离。
  • unlink 类似 — 它是一个 POSIX 函数。
  • scalbn 是函数在 C99 标准中的名称。 MSVC 不支持 C99。但是,scalbn 是 C++11 的一部分,所以我希望它最终会出现在 msvcrt 中。
  • isfiniteisnan 都是 C99。
  • itoa 既不是 C99 也不是 POSIX。这是只在夜间出现的奇怪野兽。

我还将指出其他几个人指出的内容:在标准库中为实际上非标准的任何函数加上下划线前缀在技术上更正确。这就是 msvcrt 中下划线激增的原因。

关于c++ - 为什么 Windows 和 Linux 的标准库函数名称不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896411/

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