概念 | C标准库STL,C运行时库CRT

发布于:2025-09-06 ⋅ 阅读:(22) ⋅ 点赞:(0)

简单理解:C标准库是规范,CRT是实现

1. C标准库

C标准库是C语言标准(如C89、C99、C11等)中明确规定的一套头文件和函数的集合。它是一个规范接口,定义了函数名、参数、返回值和行为。

  • C 标准库是规范,而CRT是实现;
  • CRT 实现了C 标准库,当我们说“链接C标准库”时,技术上是在链接CRT中实现标准库的那一部分;
  • 不同的编译器供应商(如Microsoft、GNU、Clang)都会根据C标准提供自己的CRT实现,其中就包含了完全符合标准的C标准库实现,但也可能包含一些自己扩展的函数。

2. C运行时库

C运行时库是C语言程序在启动和运行时所需的一系列底层库文件的集合

为C程序提供一个标准、可移植的运行环境,尤其是在程序的主函数main()被调用的前后,处理必要的初始化工作。

  • C标准库的实现就包含在C运行时库中。可以将CRT理解为一个更大的包裹,里面包含了C标准库以及其他一些程序运行所必须的底层代码;
  • 在不同的操作系统和编译器上,CRT的具体文件名不同:
    • Windows(MSVC):例如libcmt.lib (静态链接多线程版)、msvcrt.lib (动态链接版);
    • Linux(GCC):例如 libc.so (动态库) 或 libc.a (静态库),通常指的是GNU C Library (glibc);

3. C运行时库与C标准库的对比

特性

C运行时库 (CRT)

C标准库

角色

实现和支撑

规范和接口

范围

更大,包含标准库、启动代码、底层IO等

是CRT的一个子集

依赖性

程序运行必须依赖它

程序逻辑可以依赖它(如果不用标准函数,也可以不依赖)

例子

libc.so (Linux glibc),

msvcrt.dll (Windows)

stdio.h, string.h 中声明的函数

C运行时库的主要功能包括

  • 启动与终止:在main() 函数执行前,设置环境变量、初始化全局/静态变量、准备命令行参数argc和argv。在main() 退出后,负责清理资源,调用atexit()注册的函数。
  • 底层 I/O 支持:printf, scanf, fopen等标准I/O函数提供对操作系统底层I/O操作;
  • 堆内存管理:malloc(), calloc(), realloc(), free()等函数,用于管理程序的堆空间;
  • 异常处理:提供结构化异常处理(SEH)等机制的支持

C标准库的主要功能包括

  • 输入/输出 (stdio.h):printf, scanf, fgets, fopen 等;
  • 字符串操作 (string.h):strcpy, strlen, strcmp, memcpy, memset 等;
  • 内存管理 (stdlib.h):malloc, free, calloc 等;
  • 数学函数 (math.h):sin, cos, sqrt 等;
  • 工具函数 (stdlib.h):rand, srand, atoi 等;
  • 时间与日期 (time.h):time, clock 等;

(从概念和功能上简单理解提到这两个词的时候是在指什么内容,避免混淆概念)


网站公告

今日签到

点亮在社区的每一天
去签到