下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、作者信息和本聲明。否則將追究法律責(zé)任。 我相信學(xué)過C語言的同學(xué),都會在書中看到C語言特點一定有:可移植性。但是什么是可移植?如何才能可移植?C語言是如何做到可移植的?對于初學(xué)者,可移植可能是一個經(jīng)常遇到卻很神秘的詞。我想通過這篇文章來表達(dá)我對于可移植性的一些想法。 首先,在這里鋪墊一下。學(xué)過Win32程序設(shè)計的人肯定都聽說過API(Application Program Interface)。我就先說說API,高手繞過。API對于程序員來說就是系統(tǒng)提供的接口,任何涉及系統(tǒng)調(diào)用都要通過API來完成。對于不同的操作系統(tǒng)都有不同的一套
2、API,也就是說對于不同的操作系統(tǒng)系統(tǒng)調(diào)用的接口是完全不同的。所以在API層我們是不能移植的。 下面我就來說說可移植,可移植顧名思義就是可以從一個平臺移植到另外一個平臺,但是大家一定要清楚,移植是基于操作系統(tǒng)的。但是這個時候,我們需要注意一點:基于各種操作系統(tǒng)平臺不同,應(yīng)用程序在二級制級別是不能直接移植的。我們只能在代碼層去思考可移植問題,在API層面上由于各個操作系統(tǒng)的命名規(guī)范、系統(tǒng)調(diào)用等自身原因,在API層面上實現(xiàn)可移植也是不大可能的。那怎么才能實現(xiàn)可移植呢? 我們首先來看看現(xiàn)在主流的Windows和Linux平臺下代碼可移植性。有什么辦法解決這個問題呢?答案是:在各個平臺之間,基于大部分
3、需求抽象出一個中間層。在中間層中,中間層用了屏蔽底層細(xì)節(jié),在我們程序員看來C言語庫就是這樣一個中間層的作用。在各個平臺下,我們默認(rèn)C標(biāo)準(zhǔn)庫中的函數(shù)都是一樣的,這樣基本可以實現(xiàn)可移植。但是對于C庫本身而言,在各種操作系統(tǒng)平臺下其內(nèi)部實現(xiàn)是完全不同的,也就是說C庫封裝了操作系統(tǒng)API在其內(nèi)部的實現(xiàn)細(xì)節(jié)。 因此,C語言提供了我們在代碼級的可移植性,即這種可移植是通過C語言這個中間層來完成的。 當(dāng)然,大家都可以看出上面的可移植是有條件的,C語言本身不能實現(xiàn)完全的可移植,為什么呢?因為,在我們程序中,我們經(jīng)常會調(diào)用系統(tǒng)API,由于這些API在C語言中沒有對其封裝,所以我們只能用使用其原始的API,對于原
4、始的API在各個操作系統(tǒng)中他們命名不同,就不能跨平臺移植。所以,我們要寫出完完全全的跨平臺的程序,還是需要其他的一些手段。例如在我們的代碼中下功夫。以下代碼可以幫助我們實現(xiàn)各平臺之間的可移植: #ifndef _WINDOWS_ CreateThread(); /windows下線程的創(chuàng)建 #else Pthread_create(); /Linux下線程的創(chuàng)建 #endif 對于頭文件,也使用同樣的預(yù)編譯宏來實現(xiàn)。如: #ifndef _WINDOWS_ #include <windows.h> #else #include <thread.h> #endif 這樣就
5、可以實現(xiàn)代碼的可移植了。在編譯的時候只要通過#define就可以選擇在那個平臺下完成程序的編譯。 綜上所述,我們都是將C,C+等各種語言當(dāng)作中間層,以實現(xiàn)其一定程度上的可移植。如今,語言的跨平臺的程序都是以這樣的方式實現(xiàn)的。但是在不同的平臺下,仍需要重新編譯。 本文出自 “HelloWorld” 博客,請務(wù)必保留此出處 謝謝作者的博文,我自己也有一些理解:我是從匯編語言中想到這個問題的。在Linux的匯編中,Assembler使用的是NASM,它沒有提供自己的庫函數(shù),都是直接調(diào)用Linux的系統(tǒng)函數(shù)。比如要在Console中顯示一行字,那么就要進(jìn)行int 80h的系統(tǒng)調(diào)用,通過Linux System Call Dispatcher來調(diào)用具體的函數(shù)執(zhí)行這個動作。而這樣一個動作,在C語言中只需要調(diào)用printf()這個函數(shù)即可。這一個函數(shù)在Linux中這樣寫,在Windows中也是這樣寫。由此想到這是否說明C語言是這樣具有可移植性的。 又想到在Linux和Windows中,C語言代碼最后編譯完成之后的可執(zhí)行代碼不能互相交換平臺運(yùn)行,所以C語言的可移植性不應(yīng)該是在二進(jìn)制可執(zhí)行代碼級別的。那么就可能是Code級別(也就是源代碼級別)。同樣的代碼,在Linux下用Linux中的C編譯器(gcc)編譯一下,就可以在Linux平臺下運(yùn)行;在Wi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京民間個人借款合同書
- 居間采購合同居間行紀(jì)
- 全新房屋買賣作廢合同下載
- 二手房標(biāo)準(zhǔn)買賣合同
- 工業(yè)機(jī)器人系統(tǒng)集成項目合同
- 電瓶買賣合同模板
- 公司駕駛員聘用合同
- 物流運(yùn)輸合同范本年
- 全新餐飲承包合同范文下載
- 二級建造師考試內(nèi)部培訓(xùn)班講義《建設(shè)工程法規(guī)及相關(guān)知識》
- 梁湘潤《子平基礎(chǔ)概要》簡體版
- 圖形的位似課件
- 調(diào)料廠工作管理制度
- 人教版《道德與法治》四年級下冊教材簡要分析課件
- 2023年MRI技術(shù)操作規(guī)范
- 辦公用品、易耗品供貨服務(wù)方案
- 醫(yī)療廢物集中處置技術(shù)規(guī)范
- 媒介社會學(xué)備課
- 三相分離器原理及操作
- 新教科版五年級下冊科學(xué)全冊每節(jié)課后練習(xí)+答案(共28份)
- 葫蘆島尚楚環(huán)??萍加邢薰踞t(yī)療廢物集中處置項目環(huán)評報告
評論
0/150
提交評論