打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
什么是C语言的可移植?

什么是可移植?

如何才能可移植?

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++等各种语言当作中间层,以实现其一定程度上的可移植。如今,语言的跨平台的程序都是以这样的方式实现的。但是在不同的平台下,仍需要重新编译。


1.图文并茂,了解ARM体系结构与编程模型

2.所有操作系统的内核几乎都是用C语言写的,原因何在?

3.IC行业薪资排序:软件架构师、算法工程师、FPGA工程师、嵌入式开发。。。

4.招不到电子工程师,这锅谁来背?

5.三年数电五年模电,硬件工程师到底该如何发展?

6.人工智能与人类智慧的较量

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
像C语言这样的编译型语言能否在不同CPU上,通过相同标准库的编译器,用源代码实现跨平台?
J2EE与.NET平台之间的差别
Java 7 SDP:一次编写,到处运行,有时还运行得超炫!
什么是Posix?POSIX标准解决了什么问题?
posix是什么都不知道,还好意思说你懂Linux?
编写可移植C/C++程序的要点
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服