ISO / IEC 9899为什么不标准化C标准库中功能的定义? [关闭]

问题描述 投票:-2回答:1
ISO:IEC 9899标准化了C标准库功能的原型并描述了它们的行为。它指定标识符,返回类型和参数,以及某个C标准函数的匹配类型。

但是为什么不指定定义-(核心是特定功能的实际作用方式?]

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

没有标准化C标准库函数的定义并使特定的第三方发行版的开发人员无法进行实际设计的关键原因是什么?

c function language-lawyer iso libc
1个回答
6
投票
例如,以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标准化,则会发生两件事:

  • 人们可以滥用复制顺序,并且
  • 现有实现将失效。
© www.soinside.com 2019 - 2024. All rights reserved.