|
|
1
1
可能。它甚至可能在不同的linuxe和不同的Windows程序上有所不同。Linux上有几种不同的C标准库实现,Windows上可能不止一种。不同的实现将有不同的实现代码,否则律师会介入其中。
然而,实际上,您不太可能看到您所描述的Windows和Linux的情况。 |
|
|
2
0
是的,它们有不同的实现。 此外,您可能在同一操作系统上使用多个不同的实现。例如: 显然,这意味着社区中存在一些代码重复,但有很多很好的理由:
|
|
|
3
0
正如您所说的,printf之类的实现的更高级别部分,比如使用参数格式化字符串的代码,可以以跨平台的方式编写,并在Linux和Windows之间共享。我不确定是否有一个C库真正做到了这一点。 system calls Linux 和 Windows . |
|
4
0
像printf()这样的函数有两个部分。第一部分解析格式字符串,并组装一个准备输出的字符数组。如果这部分是用C编写的,那么没有理由阻止它在所有C库中通用,也没有理由阻止它不同,只要printf()的标准定义实现了。碰巧的是,不同的库开发人员已经阅读了printf()的标准定义,并且想出了不同的解析和处理格式字符串的方法。 他们中的大多数人这样做是正确的。 第二部分,将这些字符输出到stdout的位,是差异所在。它依赖于使用内核系统调用接口;内核/操作系统负责处理输入/输出,这是以特定的方式完成的。让Linux内核输出字符所需的源代码与让Windows输出字符所需的源代码非常不同。
也没有理由让包含printf()的库用C编写。只要遵守C编译器使用的相同函数调用约定,就可以用汇编语言编写它(尽管这有点疯狂!)。或者Ada(调用约定可能有点棘手……)。 |
|
5
0
让我们尝试另一种观点:竞争。 不需要。C规范并不要求行业内的竞争对手共享源代码来发布兼容的编译器,不同的标准C库开发人员也不总是希望这样。 C不需要“开源”。 |
|
|
Community wiki · 打印1到1000,不带循环或条件 2 年前 |
|
|
OverHeaven · 在2D数组中打印每行两次-C 4 年前 |
|
|
user16218933 · php上没有显示图像 4 年前 |
|
|
Sinayra · 循环中的strcat()与sprintf() 8 年前 |
|
|
obvionaoe · printf()在错误的位置打印换行符 8 年前 |
|
|
ByteMe95 · 错误的printf类型仍在打印正确的值 8 年前 |
|
|
141_MATRIX_141 · 指针C的值 8 年前 |