1、C标准
C标准主要有三个版本:C89、C99、C11,他们之间的关系可以借用这张图来表示:
C 标准主要由两部分组成:描述C的语法,和描述C标准库。C标准库定义了一组标准头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义。要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库,这样的实现才算符合C标准。不符合C标准的实现也是存在的,例如很多单片机的C 语言开发工具中只有C编译器而没有完整的C标准库。
2、C标准库
2.1 GNU/Linux版本的实现
glibc是Linux上使用最广泛的C标准库的实现。
glibc库不但包含标准C库的所有头文件,还包含了所有POSIX库的头文件。
在Linux系统里,libc.so.6就是glibc。
2.2 其他版本的实现
iOS版本的C标准库实现:是libSystem的一部分,libSystem是位于/usr/lib/libSystem.dylib中的核心库。LibSystem包含其他组件,如数学库、线程库和其他底层实用程序。
Windows版的C标准库实现:2015之前是CRTDLL.DLL库,2015之后是UCRTBASE.DLL。
Android的C标准库实现:bionic。
3、C++标准
C++的标准总结如下:
时间 | 名称 | 标准制定组织 | 事件 |
1998 | C++ 98 标准 | ISO & IEC | 1998年C++标准得到ISO和ANSI批准。 以后每5年视实际需要更新一次。 |
2003 | C++ 03 标准 | ISO & IEC | 2003年通过了C++标准第二版。 |
2011 | C++ 11 标准 | ISO & IEC | 2011年发布了C++标准第四版C++ 11,取代现行的C++ 98 和 C++ 03。 此次标准为 C++ 98发布13年来第一次重大修正。 |
2014 | C++ 14 标准 | ISO & IEC | 2014年发布了C++标准第四版C++ 14, 是 C++ 11的增量更新。 |
4 、C++标准库
4.1 GNU/Linux版本的实现
libstdc++是Linux上的C++标准库的实现。
4.2 其他版本的实现
iOS实现:Mac中,Mac OS < V10.9, libstdc++是默认选项;Mac OS >= V10.9,使用 libc++
(注1:这是LLVM项目所引人的 GNU libstdc++ 的替代;
注2:LLVM是Mac官方编译器框架)
iOS可以使用 iOS SDK来访问标准库;
Windows版实现:
在Windows上,标准库的实现一直严格限定在 Visual Studio中,它是微软官方编译器。他们通常称之为C/C++运行时库(CRT),并且它涵盖了C/C++二者的实现。名为 CRTDLL.DLL。
从 Windows 95开始,Microsoft开始将其迁移到MSVCRT[版本号].DLL之上。例:MSVCR71.DLL
在1997年左右,他们决定将文件名简化为MSVCRT.DLL,这导致了DLL混乱。因此从 Visual Studio 7.0开始,他们切换回每个版本使用单独的DLL了。
Visual Studio 2015引入了深度 CRT 重构。C/C++ 标准库的实现迁移到一个新库, Universal C运行时库(Universal CRT 或 UCRT),编译为 UCRTBASE.DLL。
Android版实现:
libc++。从 Lollipop 开始的官方安卓系统和现代 Mac OS 都将其作为 C++ 标准库使用。从NDK v17开始,它将成为NDK中唯一可用的 C++ 标准库实现。
gnustl。libstdc++的别名,这两者在GNU/Linux中同一个库。该库已被弃用,它将在NDK v18中删除。
STLport。由STLport项目编写的C++标准库的第三方实现,自2008年开始一直处于不活跃状态。与gnustl一样,STLport将在NDK v18种移除。
5、参考
https://www.crifan.com/summary_c_language_version_c89_amd1_c99_c11/