C runtime library(part of the C standard library)
任何一个 C 程序,它的背后都有一套庞大的代码来进行支撑,使得该程序得以运行在更高级别上,而不必担心同计算机底层操作的细节,这套代码至少包括:
- 入口函数(Linux,_start)
- 入口函数所依赖的函数构成的函数集合(平台系统相关);
- 各种标准库函数的实现;
这样的一套代码即称为运行时库(Runtime Library),C 语言的运行库,即被称为 C 运行库(C Runtime library,CRT)。一般来说,CRT 函数就是标准的 C 语言函数。例如,printf、scanf、strlen、fopen 等函数就属于 CRT 函数。
linux、windows 的 CRT 源码:
- visual studio,windows 下的 C/C++ IDE,在 VC\crt\src 里便可找到一份 C 语言运行库的源代码。
- linux,libc
0. CRT 的基本构成
- 启动与退出:包括入口函数及入口函数所依赖的其他函数;
- 标准函数:由 C 语言标准规定的 C 语言标准库所应当具备的函数实现;
- I/O:I/O 功能的封装与实现
- 堆:堆的封装与实现
- 语言实现:
1. windows 下的 CRT 函数
在 windows 下所有的 CRT 函数最终都是转化成为 win32 API 来执行的。
windows 本身并没有在内核之上提供对 CRT 的支持。 CRT 既可以通过静态连接来实现,也可以通过动态链接来实现(MSVCRT.DLL)。常用的安全 CRT 函数常用的安全 CRT 函数安全 CRT(C Runtime Library = C 运行时间库)函数,是微软公司对 C/C++ 语言的扩展。
它在原来函数名后添加了“_s”后缀;一般返回出错代码;并将原来的函数返回值,作为一个参数,添加到函数输入参数列表的最后;对带缓冲区参数的函数,还添加了表示缓冲区大小的输入参数,以防止内存溢出。
warning C4996: ‘fopen’: This function or variable may be unsafe.(_CRT_SECURE_NO_WARNINGS)