0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是可移植?C语言是如何做到可移植的?

5RJg_mcuworld 来源:未知 作者:伍文辉 2018-03-29 14:41 次阅读

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


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136680
  • 可移植性
    +关注

    关注

    0

    文章

    5

    浏览量

    7605

原文标题:什么是C语言的可移植?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    移植密码登录系统

    密码登录系统,labview,移植
    发表于 08-18 17:41

    移植密码登录系统,

    移植密码登录系统,
    发表于 08-18 17:55

    什么是C语言移植

    什么是移植?如何才能移植?C语言如何做到
    发表于 03-22 13:07

    如何使用抽象层设计移植代码?

    移植代码有什么重要性如何使用抽象层设计移植代码求一种移植软件的设计方案
    发表于 04-26 06:57

    如何实现Ozone项目移植

    找到源文件。本文将解析如何实现Ozone项目(.jdebug)移植。1、解决方式在Ozone中,使用项目向导新建项目时(Ozone调试器使用攻略),如果导入的elf文件和对应的源文件位于同一文件夹中
    发表于 01-05 13:56

    μC/OSII在Microchip MCU上的移植

    μC/OSⅡ是一个完整的,移植、固化、裁减的抢占式实时多任务内核。本文着重介绍了μC/OSⅡ嵌入式操作系统内核在Microchip PIC18F452 单片机上的
    发表于 07-30 14:16 55次下载

    移植µC/OS-Ⅱ教程

    这一章介绍如何将µC/OS-Ⅱ移植到不同的处理器上。所谓移植,就是使一个实时内核能在某个微处理器或微控制器上运行。为了方便移植,大部分的µ
    发表于 09-29 10:08 31次下载

    嵌入式系统C语言位操作的移植与优化

    嵌入式系统C语言位操作的移植与优化   单片机的应用越来越广泛,种类也越来越多。由于嵌入式C语言可读性强、
    发表于 03-29 15:15 1093次阅读

    SimpleLink SDK的移植示例

    1.6 SimpleLink MCU平台SDK代码可移植
    的头像 发表于 04-28 06:20 3521次阅读
    SimpleLink SDK的<b class='flag-5'>可</b><b class='flag-5'>移植</b>示例

    STM32实用的按键处理程序移植的函数免费下载

    本文档的主要内容详细介绍的是STM32实用的按键处理程序移植的函数免费下载
    发表于 04-28 08:00 2次下载
    STM32实用的按键处理程序<b class='flag-5'>可</b><b class='flag-5'>移植</b>的函数免费下载

    PETSc科学计算移植扩展工具包的用户手册免费下载

    Portable, ExtensibleToolkit for Scientific Computation科学计算移植扩展工具包。PETSc(Portable, Extensible
    发表于 10-09 08:00 2次下载
    PETSc科学计算<b class='flag-5'>可</b><b class='flag-5'>移植</b>扩展工具包的用户手册免费下载

    采用什么方法减少设计移植软件的成本

    在当今的软件设计中,为了在不同的产品线上重复使用相同的代码,需要将代码从一个平台移植到另一个平台。虽然这种代码的重复利用非常重要,但是很少有人讨论该采用何种方法来减少设计移植软件的成本,本文将介绍一种可行的设计方案。
    的头像 发表于 09-19 17:00 1533次阅读
    采用什么方法减少设计<b class='flag-5'>可</b><b class='flag-5'>移植</b>软件的成本

    STM32移植使用mbedtls-2.24.0

    TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可与Apache许可证 2.0版(与GPLv2许可也)。网站上指出,mbed TLS的目标是“易于理解,使用,集成和扩展”。核心SSL库用C编程
    发表于 12-31 19:17 14次下载
    STM32<b class='flag-5'>移植</b>使用mbedtls-2.24.0

    qt虚拟键盘源代码移植到工程中

    qt虚拟键盘源代码,移植到工程中
    发表于 09-27 11:51 10次下载

    请问如何将C语言算法移植到FPGA上?

    确定算法:首先,你需要确保要移植C语言算法是合适的。FPGA适合并行计算和高度定制的应用。因此,你需要选择一个适合FPGA实现的算法。
    发表于 09-12 17:20 1974次阅读