我自己关于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 移植。

时间: 2024-09-13 21:50:52

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

c语言-c标准库的fputc写入文件的机制问题

问题描述 c标准库的fputc写入文件的机制问题 最近用c编一个小程序,用到fputc向文件内写入字符,希望保持原有文件内容而能覆盖特定位置的字符.使用fputc以rt+方式打开文件可以实现这个.可是问题来了,硬盘在读写的时候将同时读写一整个扇区,那么fputc实现覆盖文件某个位置的字符是怎样实现的呢?是将一整个扇区读入后修改对应字符再写入?那么这样的话势必需要一个缓冲区,如果真是这样,这个缓冲区会维持到什么时候呢?比如我连续调用两次fputc,写入的数据在都同一扇区内,需要读取几次文件? 解决

windows,c语言编译器,如何安装第三方库,

问题描述 windows,c语言编译器,如何安装第三方库, 具体来说,我在windows下给cfree安装xmllib2,下了个文件夹,里面有bin,include,lib三个文件夹,我的做法是,把这三个文件夹里的内容复制到cfree对应的文件夹里面去.果然需要用到库的代码可以编译通过了,但是在链接的时候报错,所有的库函数都提示未定义.例如"undefined reference to 'xmlReadFile'". 实在不知所措,求助. 解决方案 python在windows下安装第

《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍

1.3 主流C语言编译器介绍 对于当前主流桌面操作系统而言,可使用Visual C++.GCC以及LLVM Clang这三大编译器.其中,Visual C++(简称MSVC)只能用于Windows操作系统:其余两个,除了可用于Windows操作系统之外,主要用于Unix/Linux操作系统.像现在很多版本的Linux都默认使用GCC作为C语言编译器.而像FreeBSD.macOS等系统默认使用LLVM Clang编译器.由于当前LLVM项目主要在Apple的主推下发展的,所以在macOS中,Cl

浅析C++标准库元组(tuple)源码_C 语言

一.什么是元组 元组不是什么新鲜东西,在数学.python语言还有我们今天要说的C++都有元组. 简单地说,元组就是一组东西,例如,在讲代数拓扑的时候,经常把拓扑空间X和其中一点x作为一个偶对(X, x),这其实就是个元组,点的坐标也可以看成一个元组.C++中的元组(tuple)是这个样子的: std::tuple<int, std::string> tu{ 2,"12iop" }; 一个tuple可以包含不同类型的成员,例如上面的tu包含一个int和一个字符串. 二.用法

一文读懂Go语言的net/http标准库

点击标题下「异步图书」可快速关注 在进行Web应用开发的时候,使用成熟并且复杂的Web应用框架通常会使开发变得更加迅速和简便,但这也意味着开发者必须接受框架自身的一套约定和模式.虽然很多框架都认为自己提供的约定和模式是最佳实践(best practice),但是如果开发者没有正确地理解这些最佳实践,那么对最佳实践的应用就可能会发展为货物崇拜编程(cargo cult programming):开发者如果不了解这些约定和模式的用法,就可能会在不必要甚至有害的情况下盲目地使用它们. 货物崇拜编程 第

深入解析Go语言的io.ioutil标准库使用_Golang

今天我们讲解的是golang标准库里边的io/ioutil包–也就是package io/ioutil 1.ioutil.ReadDir(dirname string)这个函数的原型是这样的 func ReadDir(dirname string) ([]os.FileInfo, error) 不难看出输入的是dirname类型是string类型的 譬如"d:/go",然会是一个FileInfo的切片,其中FileInfo的结构是这样的 复制代码 代码如下:   type FileIn

C标准库&amp;lt;assert.h&amp;gt;的实现详解_C 语言

本文实例讲解了C标准库<assert.h>的实现过程及相关用法.分享给大家供大家参考.具体分析如下: 一.背景知识 头文件<assert.h>唯一的目的就是提供assert宏定义,可以在程序中关键的地方使用这个宏来进行断言.如果一处断言被证明非真,希望程序在标准错误流输出一条适当的提示信息,并使执行异常终止. 可以这样写代码: #include<assert.h> ... assert(0 <= i && i < sizeof(a) / si

源代码-.netframework有类似于c++的标准库么

问题描述 .netframework有类似于c++的标准库么 如题,例如c++有vector.什么什么的,不知道netframework里有什么对应的么? 另外我听说netframework在gib上开源了,如果有这个标准库, 那他这个源代码有么? 嗯我听说c#才是net的主要语言,而c#里只有命名空间的概念不用include的了. 那这些标准库的源代码岂不是有点乱?都在一起么? 解决方案 有的,但是这个和标准没关系. C++的vector对应.NET的List 解决方案二: 开源和标准没有任何

C++著名类库和C++标准库介绍

C++著名类库 1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库Boost 3.C++各大有名库的介绍--GUI 4.C++各大有名库的介绍--网络通信 5.C++各大有名库的介绍--XML 6.C++各大有名库的介绍--科学计算 7.C++各大有名库的介绍--游戏开发 8.C++各大有名库的介绍--线程 9.C++各大有名库的介绍--序列化 10.C++各大有名库的介绍--字符串 11.C++各大有名库的介绍--综合 12.C++各大有名库的介绍--其他库 1