什么是可移植?如何才能可移植?c语言是如何做到可移植的?
对于初学者,可移植可能是一个经常遇到却很神秘的词。今天,我想通过这篇文章来表达对于可移植性的一些想法。
首先,在这里铺垫一下。学过win32程序设计的人肯定都听说过api(application program interface)。我就先说说api,高手绕过。api对于程序员来说就是系统提供的接口,任何涉及系统调用都要通过api来完成。对于不同的操作系统都有不同的一套api,也就是说对于不同的操作系统系统调用的接口是完全不同的。所以在api层我们是不能移植的。
下面我就来说说可移植,可移植顾名思义就是可以从一个平台移植到另外一个平台,但是大家一定要清楚,移植是基于操作系统的。但是这个时候,我们需要注意一点:基于各种操作系统平台不同,应用程序在二级制级别是不能直接移植的。我们只能在代码层去思考可移植问题,在api层面上由于各个操作系统的命名规范、系统调用等自身原因,在api层面上实现可移植也是不大可能的。那怎么才能实现可移植呢?
我们首先来看看现在主流的windows和linux平台下代码可移植性。有什么办法解决这个问题呢?
答案是:在各个平台之间,基于大部分需求抽象出一个中间层。在中间层中,中间层用了屏蔽底层细节,在我们程序员看来c言语库就是这样一个中间层的作用。在各个平台下,我们默认c标准库中的函数都是一样的,这样基本可以实现可移植。但是对于c库本身而言,在各种操作系统平台下其内部实现是完全不同的,也就是说c库封装了操作系统api在其内部的实现细节。
因此,c语言提供了我们在代码级的可移植性,即这种可移植是通过c语言这个中间层来完成的。
当然,大家都可以看出上面的可移植是有条件的,c语言本身不能实现完全的可移植,为什么呢?因为,在我们程序中,我们经常会调用系统api,由于这些api在c语言中没有对其封装,所以我们只能用使用其原始的api,对于原始的api在各个操作系统中他们命名不同,就不能跨平台移植。所以,我们要写出完完全全的跨平台的程序,还是需要其他的一些手段。例如在我们的代码中下功夫。以下代码可以帮助我们实现各平台之间的可移植:
#ifdef _windows_
createthread(); //windows下线程的创建
#else
pthread_create(); //linux下线程的创建
#endif
对于头文件,也使用同样的预编译宏来实现。如:
#ifndef _windows_
#include
#else
#include
#endif
这样就可以实现代码的可移植了。在编译的时候只要通过#define就可以选择在那个平台下完成程序的编译。
综上所述,我们都是将c,c++等各种语言当作中间层,以实现其一定程度上的可移植。如今,语言的跨平台的程序都是以这样的方式实现的。但是在不同的平台下,仍需要重新编译。
智能流量仪表用锂电池介绍
FPGA进阶教程:IIC协议若干基础概念
如何购买最好的连续供墨系统
2014年云计算将成为主要IT平台
备战5G商用化,教你设计射频前端器件
什么是可移植?C语言是如何做到可移植的?
厦门智慧多功能杆试点建设完成,助力打造厦门网红示范街区!
京东方重庆智慧系统创新中心项目举行开工仪式
5G R16标准冻结将加速工业互联网的发展
智能电视日均日活率上涨15.6% 彩电厂商革新电视定位非常重要
温度反转效应它到底为什么会发生呢?
智能充电桩低功耗蓝牙通讯应用方案
电子电路调试前的直观检查_电子电路调试方法
3G技术和标准的组成
氮封阀的工作原理_氮封阀的特点
人类使用植入芯片还有多远?马斯克的“小猪佩奇“都开始用了
AMD 7nm桌面锐龙APU上市,GPU频率大幅提升
3D打印机由几个部分组成?
工程师博客:电源功能安全
充电器芯片U6116兼具品质和成本优势