c – 为什么Windows和Linux之间的标准库函数名称不同?

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

> _stricmp被称为strcasecmp
> _unlink称为取消链接
> _scalb被称为scalbn
> _finite被称为isfinite
> _isnan被称为isnan
> _itoa和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库的持续项目”.

那么图书馆如何最终得到这些不同的名字呢?如何判断哪些名称更“标准”?

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

解决方法

这与C标准库几乎没有关系.它更多地与C99和POSIX有关.

> strcasecmp是libstdc碰巧实现的POSIX函数. msvcrt通常与POSIX保持一定的距离.
> unlink类似 – 它是POSIX功能.
> scalbn是C99标准中函数名称. MSVC不支持C99.然而,scalbn是C 11的一部分,所以我希望它最终会出现在msvcrt中.
> isfinite和isnan都是C99.
> itoa既不是C99也不是POSIX.这是一个奇怪的野兽,只是在夜晚出现.

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...