<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    7538

    瀏覽量

    130272
  • 可移植性
    +關注

    關注

    0

    文章

    5

    瀏覽量

    7576

原文標題:什么是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 ?945次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>