【发布时间】:2019-10-04 22:04:31
【问题描述】:
我了解C语言是ISO standard,我从维基百科可以看到标准包括29 header files,并且符合这些头文件,C应用程序理论上是“可移植的”。
然而,在实践中,我最近尝试在 simple C HTTP server 上编写教程,该教程使用不属于 C 标准的头文件。所以在这种情况下,我能想到的最简单的应用程序 - 一个包含单个 int main(void) 函数的 C 应用程序,不到 100 行,目的是在网络接口上侦听超出 C 标准?
在这种情况下,作为规范的 C 语言与(假设我正在为 Linux 编写应用程序)作为语言的 POSIX 规范之间的关系是什么?
据我所知,“man7.org”提供了定义所有 Unix/Linux 系统(我假设这与“POSIX”相同)系统的 API 的 C 头文件列表,如以及 Linux 平台的系统调用列表。
这包括 82 个头文件,其中 29 个 C 标准库头是一个子集,以及大约 10 000 个系统调用(至少我假设 this list 中不是头文件的所有内容都是系统调用)。
我假设任何用 C 编写的功能合理的程序都将超越标准库并使用操作系统特定的头文件。说在 Linux 上运行应用程序实际上是“POSIX 编程”不是更准确吗?
我想也可以坚持使用标准库,并为跨 POSIX 和非 POSIX 系统的可移植逻辑实现定义自定义头文件(包括特定于平台的汇编例程)。这样做过吗?
【问题讨论】: