为什么ISO / IEC 9899没有使C标准库中的功能定义标准化?

ISO:IEC 9899标准化C标准库功能的原型并描述其行为。它指定标识符,返回类型和参数,以及与某个C标准函数匹配的类型。

但是为什么不指定定义-(核心是特定功能的实际工作原理)?

为什么C标准库函数X的实际源代码在f.e之间有所不同。 Linux上的gcc编译器套件(GNU C库),macOS上的clang套件以及Windows上microsoft Visual C ++的核心系统动态库?为什么要依赖于实现,操作系统和相对的编译器设计?


编辑: 我知道这个问题乍一看对大多数人来说都是不好的,但是绝对有权利得到回答,因为我还不知道这个原因。

我不建议ISO将这些定义标准化,因为这个问题是基于观点而封闭的-不要误会我的意思。我只是问为什么是那样的事情,想从您的知识和经验中学习。

crjyie8426 回答:为什么ISO / IEC 9899没有使C标准库中的功能定义标准化?

strlen为例。如果ISO C标准对该功能的定义进行了标准化,则可能看起来像这样:

size_t strlen(char *s)
{
    size_t l = 0;
    while(s[l]) l++;
    return l;
}

这是非常低效的。 GNU C库具有用汇编语言和C语言编写的实现,这些实现非常快,但不能移植。

某些功能可能无法标准化。例如,它将如何定义putcharvfprintffwrite?像longjmp这样的汇编函数呢?还是像setjmp这样的“宏”?

可以利用其他定义。例如,如果标准C委员会将memcpy标准化,则会发生两件事:

  • 人们可以滥用复制顺序,并且

  • 现有的实现将失效。

本文链接:https://www.f2er.com/2631296.html

大家都在问