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

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

概述我正在将一个 Windows库移植到 Android(使用GNU标准C库选项,libstdc -v3),VC和GNU库之间似乎存在许多命名差异,例如: > _stricmp被称为strcasecmp > _unlink称为取消链接 > _scalb被称为scalbn > _finite被称为isfinite > _isnan被称为isnan > _itoa和itoa似乎不存在于GNU C中 > a 我正在将一个 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 – 为什么Windows和Linux之间的标准库函数名称不同?全部内容,希望文章能够帮你解决c – 为什么Windows和Linux之间的标准库函数名称不同?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1238049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存