标准C语言,有一个C标准库(C standard library / ISO C library / libc)。
标准库的意义,在于提供语言标准之外的一些既有实现,来帮助程序员更好的编写程序。
使用标准库中的类型、宏或函数,就类似于平时我们说话时会引用一些历史典故和约定俗语更好的表达自己。
同时,相比于其他语言,C的标准库是非常小的,这使得提供C的运行环境或移植C程序更加容易。
最早的C语言和标准库是C89版,1989年发布,历届版本: C89 / C90 / C95 / C99 / C11 / C18。
关于C语言和其标准库,有着不同的实现,比较主要的是Linux和Windows下使用的:
-
GNU C Library (glibc)
-
Microsoft C run-time library
在Unix/Linux系统里,其存在形式是shared library,并且和操作系统本身是不可分割的一部分(但Linux Kernel并不依赖任何库)。
比如我的Ubuntu的是:/usr/lib/x86_64-linux-gnu/libc.a
在Window系统中,比如VS开发套件中,是以DLL库形式存在的。
一般这个C标准库实现和Visual Studio绑定在一起,配套微软自己的官方编译器,被称为C/C++ Run-time Library (CRT)。
最开始CRT以CTRDLL.DLL形式存在。在Win95以后,开始使用MSVCRT[version-number].DLL(MSVCR20.DLL, MSVCR70.DLL等)。
VS2015之后,开始用Universal C Runtime Library (UCRT), Win10中以UCRTBASE.DLL形式存在。
而我本机的C标准库相关源码位于:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\crt\src。
头文件:
<assert.h>
<complex.h>
<ctype.h>
<errno.h>
<fenv.h>
<float.h>
<inttypes.h>
<iso646.h>
<limits.h>
<locale.h>
<math.h>
<setjmp.h>
<signal.h>
<stdalign.h>
<stdarg.h>
<stdatomic.h>
<stdbool.h>
<stddef.h>
<stdint.h>
<stdio.h>
<stdlib.h>
<stdnoreturn.h>
<string.h>
<tgmath.h>
<threads.h>
<time.h>
<uchar.h>
<wchar.h>
<wctype.h>
参考:
https://en.wikipedia.org/wiki/C_standard_library
https://www.gnu.org/software/libc/
https://en.cppreference.com/w/c/header
https://stackoverflow.com/questions/81656/where-do-i-find-the-current-c-or-c-standard-documents
https://github.com/dryc/libc11
https://www.wikizero.com/en/C18_(C_standard_revision)
http://bxr.su/NetBSD/lib/libc/
https://sourceware.org/newlib/
https://github.com/blanham/PDCLib
写在最后:
建议直接读一遍C标准文档,一定会对C的了解更加深刻。
网上搜索免费版本,或者参见引用: