我自己关于C语言,编译器,标准库,GUN glibc,CRT ,API之类的理解。

先声明,只是我自己看了一些东东的想法。

因为以前这一套东东太缠绕人了。

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 的标准如下:


Microsoft C Run-Time Libraries & Standard C++ Library


微软的这一套运行时库,在功能和链接库上分为 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 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 移植。

posted @ 2012-11-12 16:18 aguncn 阅读(...) 评论(...) 编辑 收藏