先声明,只是我自己看了一些东东的想法。
因为以前这一套东东太缠绕人了。
C语言,是一种语言标准,和它对照的是C++,JAVA,BASIC,FORTRAN,PASCAL等等概念。它定义的是自己一套适用于计算机的标准规范。如关键字,数据类型,表达式,语句结构等等,它不包含强制具体的实现,没有强制INT数据类型的长度一定是4等。这种具体而微的定义,一般是各编译器厂商实现的。所以,那本经典的二人合著本的C教材第二版,其实很薄。真正C语言标准的内容,不多。
编译器和标准库,其实是不同的厂商依据C语言标准的具体实现。就像马克思指出了共产主义的大约标准样子,而老毛试图来实现。GCC,TURBO,MICROSOFT(有什么是它不作的么??),编译器将程序编译,链接后形成可执行文件或库文件(静态,动态的)。其实,我感觉,编译器也不一定非要搞成一个汇编代码,只是为了方便调试。所以一般会先生成汇编代码再生成O中间目标文件。
而各个编译厂家一般都会带一套标准库,用于程序开发。标准库的标准,也有不同说明,POSIX,ISO等等,这个库是最难说清楚的。而我最个人的理解就是:其实标准库只是定义一套在计算机上实现的功能,它不和具体操作系统耦合,保证了超标准和可移植性。标准不但针对应用程序开发,也针对操作系统开发。就像LINUS写LINUX时,也遵从了POSIX的标准。如果微软的CRT只适合微软,那也就失去了通用性了。因为计算机毕竟并不是微软的代名词。这里有个很有趣的现像。在中国,很大比例的电脑用户眼中,电脑就是WINDOWS。WINDOWS是好,但微软独裁就不好,刻意打压对手就不好。我们也不像以前一样,像个P民一样刻意的相信上层管理者是个自觉的管理 者,管理者是不需要约束的。总之,宁愿受两只狼的管理,也不愿受一只羊的管理。其中人性,冷暖自知。。。扯完了,零乱了。
标准库,就和GLIBC,CRT之类的扯上了。
至于API,(API并不专指WINDOWS,MFC才专指微软,就像SQL就不就是MS SQL一样)。是具体的操作系统为用户提供的开发接口。它是真正存在而只服务操作系统而不服务于标准的。那么,如何保证标准C程序的可移植性呢?就在API上再包装一下。FOPEN,FCLOSE之类的。。真是一个尴尬的情形。人们通过C标准库功能实现了操作系统,操作系统要反为实现C标准库功能再来封装API。系统调用。。。
最近,又迷上了BIOS中断向量表和中断服务程序的实现,,一直没有好的入门。。。GDT,LDT,,,XXXXX,这个电脑世界神秘了。。我想在自己心里作一下马克思-韦伯说的“除魅”工作了。。。
《禅与摩托车修理艺术》,也快到手啦。。。
强烈推荐此URL,理清了程序界的一些大事。。。
C Runtime Library来历, API, MFC, ATL关系
http://www.cnblogs.com/chio/archive/2007/11/26/972152.html
以下转载其它网络介绍。
目录
- C/C++ 标准库与运行时库 | C/C++ Standard & Runtime Library
- 模式复用与基础功能 | Pattern Reuse & Basic Function
- 字符串处理 | String Handling
- 应用框架与图形用户界面 | Application Framework & GUI
- 通用功能 | General Function
- 线程 | Threads
- 科学与并行计算 | Scientific & Parallel Computation
- 网络功能 | Network Communication
- XML 功能 | XML Functions
- 持久存储 | Persistence & Storage
- 加解密 | Cryptographic
- 日志 | Logging
- 函数式编程 | Functional Programming
- 杂项 | MISC
-------------------------------------------
C/C++ 标准库与运行时库 | C/C++ Standard & Runtime Library
实现 ISO 的 C/C++ 语言规格标准中要求的标准库,每个组织或厂家的实现均有差异。在链接的二进制库中通常还伴随实现了平台特定的基础运行时库,例如 POSIX 标准。
ISO C/C++/POSIX 的标准如下:
- C99: ISO/IEC 9899-1999 (C Programming languages)
- C++2003: ISO/IEC 14882-2003 (C++ Programming languages)
- C++0x: ISO/IEC FCD 14882 (C++ Programming languages):第 3 版的 C++ 语言标准。关注发布页上的 Status 是否还是 Under development。
- POSIX Interface: ISO_IEC 9945-2-2003 (POSIX - Part 2: System Interfaces)
Microsoft C Run-Time Libraries & Standard C++ Library
- MSDN Run-Time Library Reference
- MSDN C Run-Time Libraries:讨论 Microsoft CRT、Standard C++ Library 对应的 lib 和 dll 文件。
- MSDN Standard C++ Library Reference:微软的标准 C++ 库参考,包括 STL 子集的参考。
- MSDN STL/CLR Library Reference:从 VC9 开始,微软的 STL 分为两种实现,一种是传统的 C++ 本地代码实现,另一种是托管 C++ 的 CLR 实现,称为 STL/CLR 库。这里是 STL/CLR 库的参考。
- What Every Computer Programmer Should Know AboutWindows API, CRT, and the Standard C++ Library, by Alex Blekhman:讲述Windows API、Microsoft CRT、Standard C++ Library 之间的关系,以及运行库的 Unicode、字符集编码问题,静态与动态链接问题。
微软的这一套运行时库,在功能和链接库上分为 3 个部分:Run-Time Libraries (CRT)、Standard C++ Library、CRT for Managed Code,分别对应的动态链接库为:msvcr[ver].dll、msvcp[ver].dll、msvcm[ver].dll。
VC8、VC9 采用了 Side-by-Side (WinSxS, Manifest) 方式部署 CRT 库,但在 VC10 中又去掉了 Side-by-Side 的部署方式。在 %SystemRoot%\system32 中有一个随 Windows 发布的 Known DLL:msvcrt.dll;而带版本号 [ver] 的库在 VC 或 VC Redistributable Package 中发布。
VC7 之后在 namespace stdext 中提供 hash_map、hash_set 两个扩展标准的容器模板。
GNU C/C++ Library
- GNU C Library
- Glibc 2 HOWTO 中文版
- The GNU C Library Manual
- GNU C++ Library:libstdc++ 在 GCC Collection 中发布。
- The GNU C++ Library Documentation
通常称为 GNU libc 和 libstdc++,是 GNU 的 C/C++ 标准库和运行时库的实现,在各种 Linux 发行版中都会安装该库,也是很多开源 C/C++ 程序选择的基础库。另外 libc 和 libstdc++ 也被移植到各种平台下,如 Windows 下的 MinGW 和 Cygwin 就包含 libc 和 libstdc++:
MinGW
MinGW: Minimalist GNU for Windows,在 Windows 平台提供一套 GNU 的开发环境,包括工具和开发库。MinGW 中包括对 GCC 和 GNU libc、libstdc++ 的 Windows 移植。
Cygwin
发源于 RedHat 的 Cygwin 项目,目标在于在 Windows 下建立一套 Unix/Linux 环境,包括 X Window 这种 Linux GUI 基础库在内,所以又叫 Cygwin/X。Cygwin 实现的重点是 cygwin1.dll,它向其它 Cygwin 程序提供 POSIX 接口,并在内部转换成 Windows API 调用。Cygwin 中包括对 GCC 和 GNU libc、libstdc++ 的 Windows 移植。