對于C語(yǔ)言可移植性的一些思考

發(fā)布時(shí)間:2018-3-20 10:23    發(fā)布者:技術(shù)小白
關(guān)鍵詞: C語(yǔ)言 , 移植
相信學(xué)過(guò)C語(yǔ)言的同學(xué),都會(huì )在書(shū)中看到C語(yǔ)言特點(diǎn)一定有:可移植性。

但是什么是可移植?
如何才能可移植?
C語(yǔ)言是如何做到可移植的?

對于初學(xué)者,可移植可能是一個(gè)經(jīng)常遇到卻很神秘的詞。今天,我想通過(guò)這篇文章來(lái)表達對于可移植性的一些想法。

首先,在這里鋪墊一下。學(xué)過(guò)Win32程序設計的人肯定都聽(tīng)說(shuō)過(guò)API(Application Program Interface)。我就先說(shuō)說(shuō)API,高手繞過(guò)。API對于程序員來(lái)說(shuō)就是系統提供的接口,任何涉及系統調用都要通過(guò)API來(lái)完成。對于不同的操作系統都有不同的一套API,也就是說(shuō)對于不同的操作系統系統調用的接口是完全不同的。所以在A(yíng)PI層我們是不能移植的。

下面我就來(lái)說(shuō)說(shuō)可移植,可移植顧名思義就是可以從一個(gè)平臺移植到另外一個(gè)平臺,但是大家一定要清楚,移植是基于操作系統的。但是這個(gè)時(shí)候,我們需要注意一點(diǎn):基于各種操作系統平臺不同,應用程序在二級制級別是不能直接移植的。我們只能在代碼層去思考可移植問(wèn)題,在A(yíng)PI層面上由于各個(gè)操作系統的命名規范、系統調用等自身原因,在A(yíng)PI層面上實(shí)現可移植也是不大可能的。那怎么才能實(shí)現可移植呢?

我們首先來(lái)看看現在主流的Windows和Linux平臺下代碼可移植性。有什么辦法解決這個(gè)問(wèn)題呢?

答案是:在各個(gè)平臺之間,基于大部分需求抽象出一個(gè)中間層。在中間層中,中間層用了屏蔽底層細節,在我們程序員看來(lái)C言語(yǔ)庫就是這樣一個(gè)中間層的作用。在各個(gè)平臺下,我們默認C標準庫中的函數都是一樣的,這樣基本可以實(shí)現可移植。但是對于C庫本身而言,在各種操作系統平臺下其內部實(shí)現是完全不同的,也就是說(shuō)C庫封裝了操作系統API在其內部的實(shí)現細節。

因此,C語(yǔ)言提供了我們在代碼級的可移植性,即這種可移植是通過(guò)C語(yǔ)言這個(gè)中間層來(lái)完成的。

當然,大家都可以看出上面的可移植是有條件的,C語(yǔ)言本身不能實(shí)現完全的可移植,為什么呢?因為,在我們程序中,我們經(jīng)常會(huì )調用系統API,由于這些API在C語(yǔ)言中沒(méi)有對其封裝,所以我們只能用使用其原始的API,對于原始的API在各個(gè)操作系統中他們命名不同,就不能跨平臺移植。所以,我們要寫(xiě)出完完全全的跨平臺的程序,還是需要其他的一些手段。例如在我們的代碼中下功夫。以下代碼可以幫助我們實(shí)現各平臺之間的可移植:

#ifdef _WINDOWS_

CreateThread(); //windows下線(xiàn)程的創(chuàng )建

#else

Pthread_create(); //Linux下線(xiàn)程的創(chuàng )建

#endif

對于頭文件,也使用同樣的預編譯宏來(lái)實(shí)現。如:

#ifndef _WINDOWS_

#include

#else

#include

#endif

這樣就可以實(shí)現代碼的可移植了。在編譯的時(shí)候只要通過(guò)#define就可以選擇在那個(gè)平臺下完成程序的編譯。

綜上所述,我們都是將C,C++等各種語(yǔ)言當作中間層,以實(shí)現其一定程度上的可移植。如今,語(yǔ)言的跨平臺的程序都是以這樣的方式實(shí)現的。但是在不同的平臺下,仍需要重新編譯。
宋工企鵝號:35--24-65--90-88   Tel/WX:173--17--95--19--08
以下課程可免費試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習的你和我聯(lián)系預約就可以免費聽(tīng)課了


本文地址:http://selenalain.com/thread-523736-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页