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

    文章

    7513

    浏览量

    124096
  • 可移植性
    +关注

    关注

    0

    文章

    5

    浏览量

    7561

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

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

收藏 人收藏

    评论

    相关推荐

    μC/OS-Ⅱ在LPC2106上的移植

    ;portable;LPC2106vC/OS—II是一个完整的、移植裁剪、固化、可靠性高、原码公开的占先式实时多任务操作系统,已被应用到多种微处理器上,vC/OS-II是用AN
    发表于 03-28 13:32

    移植密码登录系统

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

    移植密码登录系统,

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

    TPS(测试程序集)移植与互操作技术

    TPS移植和互操作技术是实现测试软件重用,扩大测试系统的应用范围,提高开发效率和降低测试开发成本的关键。实现测试软件移植与互操作的两个
    发表于 04-16 14:49

    华为C语言编程规范

    规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、测试、安全、程序效率、移植各个方面对
    发表于 11-24 09:38

    什么是C语言移植

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

    基于TMS320C6711 DSP移植过程分析μC/OS移植技巧

    引言 实时操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保稳定性和可靠性,便于维护和二次开发。 μC/OS-II是一个基于抢占式的实时多任务内核,固化、剪裁、具有高稳定性和可靠性
    发表于 07-02 07:51

    浅谈移植激励规范复用策略介绍

    Java和C++这样拥有强大的面向对象特性的编程语言,都不能直接保证我们能得到高质量的复用的代码,PSS本身的语言特性也同样需要工程师按照一定规范使用才能达到高效复用的目的。如果我们
    发表于 12-18 06:23

    【实用资料】FreeModBus移植源码+学习笔记,快速实现你的项目功能~~

    本帖最后由 张飞电子学院蔡琰 于 2021-4-2 13:18 编辑 如果你的项目刚好需要ModBus,建议直接移植标准协议源码,代码健壮,快速实现你的项目。需要就下载收藏看看吧
    发表于 04-02 11:01

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

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

    STM32是怎样移植并使用mbedtls-2.24.0的

    TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可与Apache许可证 2.0版(与GPLv2许可也)。网站上指出,mbed TLS的目标是“易于理解,使用,集成和扩展”。核心SSL库用C编程
    发表于 08-24 08:01

    如何利用MATLAB去生成可读和移植CC ++代码呢

    如何利用MATLAB去生成可读和移植CC ++代码呢?有哪些基本步骤呢?
    发表于 11-22 08:04

    如何实现Ozone项目移植

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

    移植µC/OS-Ⅱ教程

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

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

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