c - 这个函数可以兼容两个版本的 POSIX 吗?
问题描述
这是的概要strspn
:
#include <string.h>
size_t strspn(const char *s1, const char *s2);
这是 POSIX.1-2001 的描述和返回值:
strspn() 函数应计算 s1 指向的字符串的最大初始段的长度(以字节为单位),该长度完全由 s2 指向的字符串的字节组成。
strspn() 函数应返回s1 的长度;没有保留返回值来指示错误。
这(几乎)与 POSIX.1-2017 相同:
strspn() 函数应计算 s1 指向的字符串的最大初始段的长度(以字节为单位),该长度完全由 s2 指向的字符串的字节组成。
strspn() 函数应返回计算的长度;没有保留返回值来指示错误。
的实现是否strspn
可以同时兼容 POSIX.1-2001 和 POSIX.1-2017?如何?
解决方案
这是 POSIX.1-2001 中的一个错误。
本参考页上描述的功能符合 ISO C 标准。此处描述的要求与 ISO C 标准之间的任何冲突都是无意的。本卷 IEEE Std 1003.1-2001 遵循 ISO C 标准。
而 C 标准(ISO 9899:1999, 7.21.5.6函数strspn
)明确表示:
该
strspn
函数返回段的长度。
较新版本的 POSIX 修正了措辞,使其与 C 标准表达相同的意思,这也是一直以来的意图。(它显然在 2006 年被注意到并改变了;参见https://www.opengroup.org/austin/docs/austin_330.txt。POSIX中的当前版本strspn
(相当隐晦地)将此称为“ SD5-XSH- ERN- 182 应用在“更改历史记录”部分。)
正如 POSIX 所说,它“遵循 ISO C 标准”,我相信当出现冲突时,兼容的实现必须遵循 C 标准,例如在这种情况下。
推荐阅读
- php - 表格数据格式化(来自数据库的数据)
- hyperledger-fabric - 以byfn为例,Fabric cli如何获取peer/orderer的ip?
- android - 为什么我们不应该改变 TextView#getText() 返回值的内容?
- php - 如何将时间变量输出到我的时区?
- gitlab - 我可以在 Gitlab 中将两个独立的 maven 项目添加到一个项目中吗
- git - Symfony4 - 存储上传文件的好习惯
- forms - 如何在 xamarin 表单的 Flex 布局中从头开始对齐项目?
- c - 关于 dma_sync_single_for_cpu() / dma_sync_single_for_device() 的问题
- php - 如何获取这种类型的数组格式
- python - Beautiful Soup4 'NoneType' 对象没有属性 'text' 错误