zoukankan      html  css  js  c++  java
  • C运行时库函数和API函数的区别和联系

    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提供了统一的支持。
    =================================================================================================
  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4880012.html
Copyright © 2011-2022 走看看