【发布时间】:2020-06-28 17:11:24
【问题描述】:
ISO:IEC 9899 标准化了 C 标准库函数的原型并描述了它们的行为。它指定了某个 C 标准函数的标识符、返回类型和参数及其匹配类型。
但为什么它没有指定定义 - (具体功能如何实际工作的核心)?
为什么一个 C 标准库函数 X 的实际源代码在 f.e. Linux 上的 gcc 编译器套件(GNU C 库)、macOS 上的 clang 套件以及 Windows 上 Microsoft Visual C++ 的核心系统动态库?为什么它依赖于实现、操作系统和相关的编译器设计?
编辑: 我知道这个问题乍一看对你们大多数人来说似乎很糟糕,但它绝对有权得到回答,因为我还不知道原因。
我不建议 ISO 将定义标准化,因为这个问题是基于意见的 - 不要误会我的意思。我只是问为什么会这样,并想从你的知识和经验中学习。
【问题讨论】:
-
总之,灵活性。
-
为什么需要定义实现?这似乎是不必要的限制。
-
例如因为每个平台可以有不同的方式来以最佳方式实现功能。
-
所以您宁愿拥有对每个平台都相同的次优功能(在可能的范围内),而不是可能的最优功能?既然如此,为什么不限制所有类型的位宽呢?规范没有提到上限,只有下限。例如,有些平台
char是两个 字节(但sizeof(char)仍然等于1),并且int在 上从16 位增长到32 位大多数 平台。另请注意,C 规范也没有提到“堆栈”,有些硬件甚至没有堆栈。 -
@RobertSsupportsMonicaCellio -- 一些库函数使用汇编程序;这些依赖于底层平台,并且不可移植。一些库函数使用系统调用,并且不可移植。标准库为程序员提供了一个可移植的接口,但库代码本身不需要是可移植的。
标签: c function language-lawyer iso libc