但是为什么不指定定义-(核心是特定功能的实际作用方式?]
为什么C标准库函数X的实际源代码在f.e. Linux上的gcc编译器套件(GNU C库),macOS上的clang套件以及Windows上Microsoft Visual C ++的核心系统动态库?为什么要依赖于实现,操作系统和相对的编译器设计?
没有标准化C标准库函数的定义并使特定的第三方发行版的开发人员无法进行实际设计的关键原因是什么?
strlen
为例。如果ISO C标准对该函数的定义进行了标准化,则可能看起来像这样:size_t strlen(char *s)
{
size_t l = 0;
while(s[l]) l++;
return l;
}
这是非常低效的。 GNU C库具有用汇编和C编写的实现,这些实现非常快,但不能移植。某些功能可能无法标准化。例如,它将如何定义
putchar
,vfprintf
和fwrite
?像longjmp
这样的汇编函数呢?还是setjmp
之类的“宏”?可以使用其他定义。例如,如果标准C委员会将
memcpy
标准化,则会发生两件事: