关于C/C++运行期库

转载 2013年12月03日 23:07:33

http://blog.csdn.net/tutengwolf/article/details/5191208

C运行时库函数和API函数有什么区别和联系呢?


C运行时库函数是指C语言本省支持的一些基本函数,通常是汇编直接实现的 。   
API函数是操作系统提供给用户方便设计应用程序的函数,实现一些特定的功能,API函数也是C语言的函数 实现的。
他们之间区别是:API函数是针对操作系统的,C语言运行时函数则是针对C语言本身的。
===========================================================
1)运行时库就是   C   run-time   library,是   C   而非   C++   语言世界的概念:取这个名字就是因为你的   C   程序运行时需要这些库中的函数.   
    
2)C   语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C   语言内核开发出来之后,Dennis   Ritchie   和   Brian   Kernighan   就用   C   本身重写了   90%   以上的   UNIX   系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的   LIBRARY,C   run-time   library   就是这样形成的。   
    
3)随后,随着   C   语言的流行,各个   C   编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的   Standard   Library,但大部分实现都是与各个平台有关的。由于各个   C   编译器对   C   的支持和理解有很多分歧和微妙的差别,所以就有了   ANSI   C;ANSI   C   (主观意图上)详细的规定了   C   语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了   Standard   Library   的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方   C   运行库(Third   party   C   run-time   libraries)。   
    
4)C   run-time   library里面含有初始化代码,还有错误处理代码(例如divide   by   zero处理)。你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C   run-time库,main()就不会被调用,exit()也不能被响应。因为C   run-time   library包含了C程序运行的最基本和最常用的函数。  
    
5)到了   C++   世界里,有另外一个概念:Standard   C++   Library,它包括了上面所说的   C   run-time   library   和   STL。包含   C   run-time   library   的原因很明显,C++   是   C   的超集,没有理由再重新来一个   C++   run-time   library.   VC针对C++   加入的Standard   C++   Library主要包括:LIBCP.LIB,   LIBCPMT.LIB和   MSVCPRT.LIB   
    
6)Windows环境下,VC提供的   C   run-time   library又分为动态运行时库和静态运行时库。   
动态运行时库主要是DLL库文件msvcrt.dll(or   MSVCRTD.DLL   for   debug   build),对应的Import   library文件是MSVCRT.LIB(MSVCRTD.LIB   for   debug   build)   
静态运行时库(release版)对应的主要文件是:   
LIBC.LIB   (Single   thread   static   library,   retail   version)   
LIBCMT.LIB   (Multithread   static   library,   retail   version)   
    
msvcrt.dll提供几千个C函数,即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时,很大一部分时间时在这些运 行库里运行。在你的程序(release版)被编译时,VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件 (libc.lib,libcmt.lib或Import   library   msvcrt.lib)链接进来。   
    
编译时到底哪个C   run-time   library联入你的程序取决于编译选项:   
/MD,   /ML,   /MT,   /LD       (Use   Run-Time   Library)   
你可以VC中通过以下方法设置选择哪个C   run-time   library联入你的程序:   
To   find   these   options   in   the   development   environment,   click   Settings   on   the   Project   menu.   Then   click   the   C/C++   tab,   and   click   Code   Generation   in   the   Category   box.   See   the   Use   Run-Time   Library   drop-down   box.   
    
从程序可移植性考虑,如果两函数都可完成一种功能,选运行时库函数好,因为各个   C   编译器的生产商对标准C   Run-time   library提供了统一的支持.  
==================================================================
怎么样链接C运行库,而不需要DllMain()?

MSDN   说可以不实现DLLMAIN(),而链接运行库,怎么弄?

在编译设置中加入   /ENTRY:_CRT_INIT@12   ,或者使用   #pragma
#pragma   comment(linker,   "/ENTRY:_CRT_INIT@12")Top
==================================================================

C++ 编译期与运行期

1)常数值在编译时就确定,变量值要到运行时才确定; 2)局部变量相对于栈基址的偏移,编译时就确定,堆空间变量的相对位置也要运行时才确定; 3)静态变量在用户空间的地址【虚拟地址】编译时就确定,而非...
  • dark19940411
  • dark19940411
  • 2015年04月02日 15:01
  • 554

C++中编译期多态机制和运行期多态机制之间的区别

函数由函数名、参数个数、参数类型、返回值和调用方式等组成。 函数签名:把函数名去掉之后函数的剩余部分(参数个数、参数类型、返回值和调用方式等)。 顶层函数:在类之外声明并定义的函数称为顶层函数。 成员...
  • wangkai_123456
  • wangkai_123456
  • 2015年12月16日 15:09
  • 398

C/C++运行时库

一、运行时库 程序运行时不可缺少的库就是运行时库(或者叫运行期库,英文名称run-time library),通常以静态库或者动态库的形式呈现。比如C运行时库( C run-time library...
  • lcfeng1982
  • lcfeng1982
  • 2014年01月18日 09:19
  • 2793

C++ 多态 polymorphic 运行时期多态

运行时期多态  在运行的时候才能够确定被调用的函数 运行时期多态主要是通过继承和虚函数实现的 更底层一点,运行时期多态是通过虚函数表来实现的。 #include #include using ...
  • jiaoma91
  • jiaoma91
  • 2016年06月19日 15:15
  • 83

c/c++运行期库的使用

本次介绍关于c/c++运行库的一些重要的内容 很多人在使用malloc,free函数时,会经常出现内存错误 比如下面的源码void ExeFunc() { PVOID pv=DLLFunc...
  • baidu_25539425
  • baidu_25539425
  • 2018年02月12日 14:21
  • 2

Java编译期和运行期 & JVM

Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。       首先两张图,描述编译和执行的过程: Java代码编译是由Java源码编译器来完成,流程图如下所示...
  • WangQYoho
  • WangQYoho
  • 2016年09月12日 10:54
  • 2393

Java中的运行期类型鉴定

 对于作为程序一部分的每个类,它们都有一个class对象。换言之,每次写一个新类时,同时也会创建一个class对象,更恰当的说,是保存在一个完全同名的.class文件中。在运行期,一旦我们想...
  • wuli2496
  • wuli2496
  • 2015年06月01日 20:35
  • 537

关于对象运行时方法匹配的问题

对象变量在运行时方法匹配的原则是:方法与编译时类型匹配;即当源代码运行时,系统只会记住变量的编译时类型,并不会记住系统的运行时类型。 以下是说明过程: 源代码①: public class E...
  • hcy2319964421
  • hcy2319964421
  • 2016年10月29日 20:59
  • 195

编译期多态和运行期多态

什么是多态所谓的多态是通过一个单一的标识符支持不同的特定行为的能力。多态的分类从绑定时间 静态多态 (编译期多态) 动态多态 (运行期多态) 从表现的形式 虚函数 重载 模板 转换 (宏定义) 今天...
  • qq_35644234
  • qq_35644234
  • 2017年05月02日 19:35
  • 280

关于C++多态的一些思考(编译期绑定和运行期绑定)

**C++中的多态必须具有以下三个前提条件: 1.必须存在一个继承体系结构 2.继承体系结构中的一些类必须具有同名的virtual成员函数(virtual是关键字) 3.至少有一个基类类型的指针...
  • sinat_33442459
  • sinat_33442459
  • 2017年03月28日 14:22
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C/C++运行期库
举报原因:
原因补充:

(最多只允许输入30个字)