首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问:C Runtime Library、C++ Runtime Library、Windows API 和 C++标准四者之间的关系

2012-08-13 
请教:C Runtime Library、C++ Runtime Library、Windows API 和 C++标准四者之间的关系本人的理解是:C++Runt

请教:C Runtime Library、C++ Runtime Library、Windows API 和 C++标准四者之间的关系
本人的理解是:C++   Runtime   Library包含了C   Runtime   Library。而C++   Runtime   Library是通过Windows   API实现的。而C++标准只是为编译器的设计提供说明和约束。至于更底层(其实“底层”到底是什么,我也不是很清楚,希望大家指点一下)的东西,它并不关心。因为C++是高级语言。
        这样理解对吗?
        我是外行,这个问题一直没搞清楚。我想学得深入一些。请高手指教。谢谢!

[解决办法]
CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。
CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外,都是用C/C++编写的,所以内核及许多关键服务都在CRT上运行(它们都采用dll技术动态链接)。此外,用VC编写的C/C++程序也用到它们(可以动态链接,也可以静态链接,前者运行时需要系统中已安装CRT的dll,后者不需要)。可以说,CRT就是Microsoft编写Windows时使用的低层类库。然后,它又被当作C++标准库的一个实现包含在了VC系列中;我们在VC中使用的C++标准库,其实就是CRT的一个真子集(少了C++标准所不包含的代码,特别是大量的低层C代码)

至于CRT与WINDOWS API的关系,与许多人理解的相反,WINDOWS API作为Windows的一部份,是在CRT的基础上开发的。你可以将Windows(及其API)看作一个项目,而这个项目使用的语言是汇编/C/C++,使用的类库就是CRT。所以,离开CRT,Windows API也无法使用的。

C++标准,是C++的通用语言规范,指导所有C++使用者。而CRT的其中一部分可以看作是Microsoft开发的一个C++标准库实现(其实也确实如此,Microsoft在开发CRT时,参考了正在标准化过程中的C++语言规范)。它与C++标准有一定的差距,部分原因是,在C++没有完成标准化之前,CRT已经开发并投入使用了。为了向下兼容以前的Windows代码,早期的CRT与C++标准总有一定的差距。但是CRT确实在不断的改进中。VC6带的CRT与C++标准还有比较大的差距,而VC8的几乎完全符合C++标准了。

综上,CRT(Microsoft 's C/C++ Runtime Library)的一个真子集(主要是C++ Runtime Library)是一个符合(或至少是企图符合)C++标准的C++库。而Windows API(以及Windows的其他许多部分)都是在CRT的基础上开发的。
[解决办法]
Windows 的 API 分两层,上层 Win32 API 即 Kernel32.dll user32.dll ... 提供了对
Windows 的一个抽象,应用程序通常使用它们,这是为了在 Windows 的版本间提供
兼容性。下层包括 ntkrnl32.dll 这样的系统特定API,是提供给上层调用的。至于先
有CRT还是先有API的问题,RFC1987讲的不错,linux的CRT是 glibc
编写 OS Kernel 是需要特殊的编译器的,比如 linux 只能用 GCC 编译,因为它使用
了大量的 GCC 扩展。
[解决办法]
其实就是先有鸡还是先有蛋的问题

操作系统自己用C语言编写,然后暴露出接口给开发人员使用,比如Win32 Platform SDK。那么开发人员根据需要选择函数与库时,可以选择WIN32 API,或者是标准的C\C++函数库。但是本质上这些代码还是依赖于WINDOWS自己的实现,你可以看VC附带的crt代码,仔细的研究一下诸如main,printf是如何实现的。

只要愿意MS甚至可以完全取消C\C++运行库,所有人必须用WIN32 API编写,那样的话代码移植就成为不可能了,所以MS不会这样做。
[解决办法]
真不敢相信,关于C++以及C++ Runtime Library朋友们有那样多的误解!注意:
‘C Runtime Library’是C语言针对某一特定平台上实现自已语言特性所提供的链接库。诸如printf()以及malloc()...等等的二进制实现都身在其中。它由编译器厂商提供,和所运行的操作糸统厂商无关,例如BC在Windows上的C Runtime Library由Borland提供,和Microsoft
无关。C++的C++ Runtime Library同前理。
‘Windows API ’是Windows平台为在该平台上的应用开发提供的应用编程接口,程序中如果要使用Windows为我们提供的服务,则以调用其API函数的方式来实现。它由平台厂商Microsoft提供,多数用C语言实现。
C++标准是国际标准委员会(ISO)及ANSI针对C++提出的工业化标准,它针对C++语言,及其实现以及将来可能的扩展制定了所有编译器厂商和使用者应该遵循的标准规范。注意,仅仅是制定标准而不具体的实现(它不提供编译器实体)。所以它和任何厂商无关。

热点排行