C运行时库函数
C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的。

  

API函数

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 runtime 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(或 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运行时库函数和API函数的区别和联系的更多相关文章

  1. C运行时库函数

    C运行时库函数是指C语言本省支持的一些基本函数,通常是汇编直接实现的. API函数是操作系统提供给用户方便设计应用程序的函数,实现一些特定的功能,API函数也是C语言的函数实现的. 他们之间区别是: ...

  2. ios 引入第三方库 运行时找不到函数实现

    今天引入webtrends 这个库,结果一直运行时找不到函数,纳闷了一下午! 后来发现,是other flag没有设置对,对于那些包含category用来扩展ios原始类型的库,链接的时候需要特别的链 ...

  3. Java常见的异常,Java运行时异常和一般异常的区别

    Java常见的异常,Java运行时异常和一般异常的区别 异常和错误二者的不同之处: Exception: 1.可以是可被控制(checked,检查异常) 或不可控制的(unchecked,非检查异常) ...

  4. java异常继承何类,运行时异常与一般异常的区别

    一.基本概念 Throwable是所有异常的根,java.lang.ThrowableError是错误,java.lang.ErrorException是异常,java.lang.Exception ...

  5. openmp学习心得(二)----常见的运行时库函数

    omp_set_dynamic();如果设置了动态调整,并行区域会根据系统的资源状况,动态分配线程的数量.好像仅仅有0和非0的区别,设置为0不进行动态分配. omp_get_num_threads,o ...

  6. Android程序运行时权限与文件系统权限的区别

    apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置. (1)Android中的apk必须签名 (2)基于UserID的进程级别的安全机 ...

  7. 教你如何检查一个函数是否为JavaScript运行时环境内建函数

    在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...

  8. Runtime运行时机制

    Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的 我们需要了解的是 Objective-C 是一门动态语言, ...

  9. Java异常处理-----非运行时异常(受检异常)

    非运行时异常(受检异常) 如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错. 1:IOException 使用要导入包import java.io.IO ...

随机推荐

  1. tesseract3.0.2font_id >= 0 && font_id < font_id_map_.SparseSize():Error:Assert failed:in file ..\..\classify\trainingsampleset.cpp, line 622

    https://stackoverflow.com/questions/14025965/mftraining-gives-warning-no-protos-configs-for-f-in-cre ...

  2. JSP-JSP

    JSP(Java Server Page) 1 JSP简介 2 JSP脚本和注释 3 JSP的运行原理 jsp本质上就是Servlet 看在服务器里面提应用就应该明白了 我们可以看下这个源码 目录地址 ...

  3. js实现翻转一个字符串

    字符串作在程序中是非常常见的,因为程序中绝大部分的数据都可以当作字符串来处理.在这里介绍几种翻转字符串的方法. (1)使用字符串函数 //使用数组翻转函数 function reverseString ...

  4. web前端学习(三)css学习笔记部分(4)-- CSS选择器详解

    4.  元素选择器详解 4.1  元素选择器 4.2  选择器分组 用英文逗号","相连,使用相同的样式表 使用通配符对所有元素进行通用设定. 4.3  类选择器详解 4.3.1. ...

  5. https比http到底那里安全?

    HTTPS和HTTP的概念 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP ...

  6. 修改Eclipse自动换行长度

    使用Ctrl+Shift+F自动格式化代码的时候,有时候折行太多反而让代码看起来更乱,不容易阅读. 解决办法: Window-->Preferences-->Java-->Code ...

  7. WPF Popup实现拖动

    问题一.popup总是置顶,遮挡其他窗口 最近发现popup设置打开后,总是会遮挡其他窗口,而我们只想让它仅仅在应用程序的上一层即可,并不像让它在最上面 解决方案是继承Popup重新定义控件Popup ...

  8. ICP算法(迭代最近点)

    参考博客:http://www.cnblogs.com/21207-iHome/p/6034462.html 最近在做点云匹配,需要用c++实现ICP算法,下面是简单理解,期待高手指正. ICP算法能 ...

  9. python第二天 : 计算机基础(二)

    目录 1.什么是编程 2.操作系统有什么用? 3.计算机由哪三大部分组成? 4.简述操作系统和应用程序的启动流程? 5.编程语言的分类有哪些?并评估各个分类的优缺点. 1).机器语言 2).汇编语言 ...

  10. 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱

    在开发JavaWeb应用时,动态生成能够局部刷新的验证码是一项必须的功能,在这里我们将会详细的讲解如何实现这一功能. 一.涉及技术 该功能需要用到AJAX异步传输技术,这样能保证在点击"看不 ...