C运行时库函数和API函数的区别和联系
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函数的区别和联系的更多相关文章
- C运行时库函数
C运行时库函数是指C语言本省支持的一些基本函数,通常是汇编直接实现的. API函数是操作系统提供给用户方便设计应用程序的函数,实现一些特定的功能,API函数也是C语言的函数实现的. 他们之间区别是: ...
- ios 引入第三方库 运行时找不到函数实现
今天引入webtrends 这个库,结果一直运行时找不到函数,纳闷了一下午! 后来发现,是other flag没有设置对,对于那些包含category用来扩展ios原始类型的库,链接的时候需要特别的链 ...
- Java常见的异常,Java运行时异常和一般异常的区别
Java常见的异常,Java运行时异常和一般异常的区别 异常和错误二者的不同之处: Exception: 1.可以是可被控制(checked,检查异常) 或不可控制的(unchecked,非检查异常) ...
- java异常继承何类,运行时异常与一般异常的区别
一.基本概念 Throwable是所有异常的根,java.lang.ThrowableError是错误,java.lang.ErrorException是异常,java.lang.Exception ...
- openmp学习心得(二)----常见的运行时库函数
omp_set_dynamic();如果设置了动态调整,并行区域会根据系统的资源状况,动态分配线程的数量.好像仅仅有0和非0的区别,设置为0不进行动态分配. omp_get_num_threads,o ...
- Android程序运行时权限与文件系统权限的区别
apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置. (1)Android中的apk必须签名 (2)基于UserID的进程级别的安全机 ...
- 教你如何检查一个函数是否为JavaScript运行时环境内建函数
在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...
- Runtime运行时机制
Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的 我们需要了解的是 Objective-C 是一门动态语言, ...
- Java异常处理-----非运行时异常(受检异常)
非运行时异常(受检异常) 如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错. 1:IOException 使用要导入包import java.io.IO ...
随机推荐
- 使用Jedis操作Redis-使用Java语言在客户端操作---hash类型
我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器. 所以该类型非常适合于存储值对象的信息.如Username.P ...
- socker TCP UDP BIO NIO
BIO: Java 1.4 以前只有之中方式. bio:阻塞式IO, 一个 socker 连接占用一个 线程.如果 IO 阻塞,会在传输速度限制,这个线程也会一直等待在这里,等待从socker 的 ...
- 数据库--sql语句
数据库的操作语句总共四大类:增insert into 删delete 改update 查select; 增:INSERT INTO `表名`(`字段名`,`字段名`) `VALUES`('值', ...
- python_数据类型_list
names = ['one','two','three','four','five'] #列表切片 print(names[0:]) #['one', 'two', 'three', 'four', ...
- CesiumLab V1.4 分类3dtiles生成(倾斜单体化、楼层房间交互)我记得我是写过一篇关于倾斜单体化的简书文章的,但是现在找不到了。不过找不到也好,就让他随风逝去吧,因为当时我写那篇文章的时候,就发现了cesium实际是有另一种更高效的单体化。就下面这个示例https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=
我记得我是写过一篇关于倾斜单体化的简书文章的,但是现在找不到了.不过找不到也好,就让他随风逝去吧,因为当时我写那篇文章的时候,就发现了cesium实际是有另一种更高效的单体化.就下面这个示例 http ...
- day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件
一级缓存的更新会自动同步到二级缓存. @SuppressWarnings("all") @Test // 将内存中的数据写到硬盘 public void demo7(){ Sess ...
- vue里调用moment.js
1.首先安装moment npm install moment --save 2.在main.js里引入 import moment from 'moment'//导入文件 Vue.prot ...
- Mybatis错误:Result Maps collection already contains value for ***
[转载]原文链接:https://blog.csdn.net/maoyuanming0806/article/details/77870345 使用mybatis时,服务器启动时出错 严重: Exce ...
- 推荐一个 Laravel admin 后台管理插件
如何优雅的写代码,我想是每位程序员的心声.自从15年初第一次接触 Laravel 4.2 开始,我就迷上使用 Laravel 框架了.我一直都想找个时间好好写写有关 Laravel 的使用文章,由浅入 ...
- go struct 工厂