c运行库、c标准库、windows API

2024-04-05 00:38
文章标签 windows api 标准 运行库

本文主要是介绍c运行库、c标准库、windows API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

From:c运行库、c标准库、windows API都是什么玩意


C运行库和C标准库的关系

C标准库,顾名思义既然是标准,就是由标准组织制定的。是由“美国国家标准协会(American National Standards Institute,ANSI)”为了规范C语言库而制定的标准。在最初,各个大学各个公司使用的C语言库都不尽相同,造成相互移植非常困难,在这个背景下,制定了这个标准。

C运行库,是和平台相关的,即和操作系统相关的。它由不同操作系统不同开发平台提供不同的C运行库。但是C运行库的部分实现是基于C标准库的,即C运行库是各个操作系统各个开发工具根据自身平台开发的库,某种程度上,可以说C运行库是C标准库的一个扩展库,只是加了很多C标准库所没有的与平台相关的或者不相关的库接口函数。举例子如:c标准库的strcpy函数负责字符串的拷贝,但是由于缺少对目地字符串缓冲区大小的控制,极有可能导致缓冲区溢出(大量的缓冲区溢出攻击都是由于这种漏洞而产生的);相反,Windows提供了能够实现同样功能的安全的字符串拷贝函数,减少了缓冲区攻击的可能,strcpy_s。这些函数是以c运行库的方式提供的,当然,不同的操作系统,c运行时库可能不同,但是对c标准库的支持是完全一致的,也就是说,在不同的操作系统上,使用同一个c标准库的函数必然产生一致的结果。

C标准库中提供的有:

l           标准输入输出(stdio.h)。

l           文件操作(stdio.h)。

l           字符操作(ctype.h)。

l           字符串操作(string.h)。

l           数学函数(math.h)。

l           资源管理(stdlib.h)。

l           格式转换(stdlib.h)。

l           时间/日期(time.h)。

l           断言(assert.h)。

l           各种类型上的常数(limits.h & float.h)。

你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C   run-time库,main()就不会被调用,exit()也不能被响应。因为C   run-time   library包含了C程序运行的最基本和最常用的函数。  

如下是C运行库与C标准库的关系:

一个C运行库大致包含了如下功能:

l           启动与退出:包括入口函数及入口函数所依赖的其他函数等。

l           标准函数:由C语言标准规定的C语言标准库所拥有的函数实现。(C标准库

l           I/O:I/O功能的封装和实现,参见上一节中I/O初始化部分。

l           堆:堆的封装和实现,参见上一节中堆初始化部分。

l           语言实现:语言中一些特殊功能的实现。

l           调试:实现调试功能的代码。

操作系统API和C运行库CRT,C标准库之间

首先,C语言要早于Windows出现,而且C语言实际标准制定的开始时间也要早于Windows(API概念出现的)系统的开发时间。所以Windows系统在开发的时候是完全可以使用C语言的。目前最多的说法是用C和汇编实现的。那么只要用C,就可能用C标准库。

我们假设两种情况,一是Windows API的实现包含部分C标准库函数的功能实现,这就决定了这部分操作系统API的实现是由调用标准库实现的,那么在发布时需要加入所用到的c标准库DLL一同发布。

 二是微软的内核(包括API)开发是使用着一个和平台严格相关的C语言的静态的链接库,这样不必提供Dll也能开发和发行。而且必然的这个C库是在汇编的基础上实现的,也就是说这个库里面的C函数都是(至少有很大比例)披着C语法的汇编代码。

要你是微软,你选择哪个呢?也许是两者兼而有之,也许是后者。

一般情况下,我们说C运行库暗含的意思是哪种平台哪个开发平台的C运行库,

CRT的实现是基于Windows API的,而WindowsAPI的开发也是基于C语言的,但不是或者不一定基于CRT(或者C标准库)的。

再深一步,虽然CRT是基于操作系统 API实现的,但并不代表所有的CRT封装了操作系统 API,如一些用户的权限控制,操作系统线程创建等都不属于C运行库,于是对于这些操作我们就不得不直接调用操作系统API或者其他库。

总结一下,C标准库就是任何平台都可以使用的基本C语言库。而CRT除了将C标准库加入所属范围外,还扩展了与平台相关的接口库,这些接口实现根据不同平台调用不同平台的操作系统API。

如下图所示,采用C标准库编写的程序可以应用到windows平台,也可以应用到linux平台;而用CRT另外与平台相关的库函数编写的应用程序不能跨平台运行。

 而不同平台的操作系统API实现,是用C标准库呢,还是汇编呢,这个可有,可没有。毕竟那么多windows API只要发现一个调用C标准库的了,就有了。概念理解了即可,至于微软实现的时候基于何种考虑不使用C标准库,或者使用C标准库都有自己的考虑。那就是操作系统内部的研究范围了,等我知道了之后再确定这点。哈哈。。。。。。

这篇关于c运行库、c标准库、windows API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877235

相关文章

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

C 标准库 - `<float.h>`

C 标准库 - <float.h> 概述 <float.h> 是 C 标准库中的一个头文件,它定义了与浮点数类型相关的宏。这些宏提供了关于浮点数的属性信息,如精度、最小和最大值、以及舍入误差等。这个头文件对于需要精确控制浮点数行为的程序非常有用,尤其是在数值计算和科学计算领域。 主要宏 <float.h> 中定义了许多宏,下面列举了一些主要的宏: FLT_RADIX:定义了浮点数的基数。

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起