关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
我对 C 和 C++ 编程的众多标准和接口(interface)感到困惑。有 ANSI C、ISO C、GLIBC、POSIX、Win32、MFC 等等。这些标准之间有什么区别,它们之间有什么关系?在什么情况下你会选择一个特定的标准?有没有关系图?
最佳答案
ANSI / ISO C
ANSI C/ISO C 是旨在支持极其广泛的不同系统的标准,并允许编译过去的遗留代码。我们可以称之为“标准C”。因为 C 是标准化的,所以有很多实现。
C 标准的一半是指语言本身,其中包括关于可用类型、可以使用什么语法等的具体保证。这些保证有时太宽泛而无法舒适地使用。例如,在标准 C 中,保证至少存在以下类型:
short int
, 至少代表 -32767..+32767 int
, 至少代表 -32767..+32767 long int
, 至少代表 -2147483647..+2147483647 列表中的每种类型都必须比上一种更宽,但系统有很多选择不同尺寸的余地。例如,在 DSP 或旧的 super 计算机上,所有类型的大小可能完全相同。也不能保证一个字节有 8 位(可能超过 8 位)。
C标准的另一半规定了标准库,比如每个头文件提供了哪些功能。例如,
<stdlib.h>
header 必须定义 malloc()
功能。用标准 C 编写的程序几乎可以在任何地方运行,只要您小心不要依赖不可移植的结构。然而,C 标准并没有提供太多的功能......所以这些可移植的程序只能在控制台上打开文件或读取用户的输入。
标准 C 有多个版本。最常见的是 C89/C90、C99 和 C11。找到仅支持 C90(例如 MSVC)的系统并不少见。
POSIX
POSIX 是一个更大、更全面的标准,其中包括标准 C 作为其中的一部分。 POSIX 还指定了操作系统的组成部分。因为 POSIX 是标准化的,所以有很多实现。
在 POSIX 系统上,对 C 实现有一些限制。例如,在 POSIX 上:
/
字符始终用作路径分隔符 errno
发出信号POSIX 还指定了标准库的一些附加功能,例如
为在 POSIX 上运行而编写的程序可以在 Linux、Unix、OS X 或其他兼容 POSIX 的系统上运行。这些程序通常需要额外的工作才能在 Windows 上运行。 POSIX 标准包括用于诸如网络、进程创建、shell、终端和文件系统之类的接口(interface)。编写复杂的 POSIX 程序(如 Web 服务器或命令行 shell)并不太难。
POSIX 有多个版本。
GLibc
GLibc 是 GNU C 库。它实现了标准 C 库、C 库的 POSIX 扩展以及一些额外的功能。 GLibc 不是标准化的,只有一种实现。
例如,GLibc 提供
asprintf()
,就像 sprintf()
但它会自动分配缓冲区。使用 GLibc 扩展的程序通常不可移植,尽管某些扩展也可用于 BSD 系统。
Win32
Win32 是特定于 Windows 的 API。 API 提供了标准 C 中不可用的功能,例如用于创建图形用户界面的功能。 Win32 不是标准化的,只有两种实现(Windows 和 WINE)。 Win32 提供了大量的接口(interface),例如:
这些接口(interface)与 POSIX 重叠,但函数调用大多不同。例如,在 Windows 上,您可以使用
CreateMutexEx()
创建互斥锁。 ,并在 POSIX 上使用 pthread_mutex_init()
创建互斥锁.对此的异常(exception)是网络套接字,它们在 Windows 和 POSIX 之间基本相同。为 Win32 编写的程序通常只能在 Windows 上运行,也可能在 WINE 上运行。
MFC
MFC 是 Microsoft 提供的一个库,它可以更轻松地编写 Win32 应用程序。它实际上已经过时,不应用于新项目。 MFC 不是标准化的,只有一种实现。
关于c++ - 什么是POSIX,有什么其他的接口(interface)标准可以替代它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697152/