李俊超
摘 要 C++作為一種主流的編程語言,不僅繼承了C語言的編程效率,而且拓展了自身的語音特性,例如模板、泛型編程等,因此幾乎所有的平臺(tái)都支持C++語言,并得到了廣泛地應(yīng)用,然而在不同的平臺(tái)下,C++語言內(nèi)部變量的定義和擴(kuò)展功能卻不盡相同,這就給跨平臺(tái)軟件的設(shè)計(jì)開發(fā)帶來了很大的困難。本文簡要敘述跨平臺(tái)概念,并對C++跨平臺(tái)的開發(fā)的影響因素以及設(shè)計(jì)實(shí)現(xiàn)進(jìn)行分析,提供了一些想法思路,希望能對跨平臺(tái)軟件的開發(fā)起到一定的推動(dòng)作用。
關(guān)鍵詞 C++語言 跨平臺(tái) 軟件開發(fā) 設(shè)計(jì)實(shí)現(xiàn)
中圖分類號:TP31 文獻(xiàn)標(biāo)識(shí)碼:A
20世紀(jì)70年代,Bell實(shí)驗(yàn)室首先開發(fā)了C語言系列,經(jīng)過十年的演化變遷,80年代C++語言便應(yīng)運(yùn)而生。C++語言是C語言的改良進(jìn)化版本,除了沿用C語言直接運(yùn)行在機(jī)器上,不需要虛擬機(jī)作為中介的高效率特點(diǎn)之外,根據(jù)軟件開發(fā)的需求還融入了虛函數(shù)、模板、操作符重載等特性功能,因此C++語言得到了特別廣泛地應(yīng)用。C++語言幾乎所有的平臺(tái)下進(jìn)行使用,然而在不同平臺(tái)之間的應(yīng)用時(shí)卻難以兼容,隨著多元化軟件系統(tǒng)開發(fā)的需求日益增加,如何在軟件開發(fā)中設(shè)計(jì)并實(shí)現(xiàn)C++語言跨平臺(tái)的方案將會(huì)是今后工作的重點(diǎn)。
跨平臺(tái)是軟件開發(fā)中的常用概念,指的是在一個(gè)操作平臺(tái)Windows設(shè)計(jì)開發(fā)的應(yīng)用程序在另一個(gè)操作平臺(tái)Linux下同樣能夠使用運(yùn)行,二者完全兼容。隨著當(dāng)前軟件工程的迅猛發(fā)展,跨平臺(tái)的軟件開發(fā)能夠給應(yīng)用程序本身帶來巨大的市場潛力,與此同時(shí),如果應(yīng)用軟件針對不同的CPU提供并測試各自的編譯版本,再發(fā)布到各自平臺(tái)上而產(chǎn)生不同的軟件版本,這樣的工作量是特別龐大的,因此,跨平臺(tái)的開發(fā)致力于是應(yīng)用程序幾乎不做修改就能運(yùn)用到不同的平臺(tái)上。
1跨平臺(tái)軟件開發(fā)的影響因素
在C++語言跨平臺(tái)軟件開發(fā)過程中,除了各個(gè)平臺(tái)間差異性和兼容性之外,C++語言自身的特性以及編譯環(huán)境對其都有影響,無形之中加大了跨平臺(tái)軟件開發(fā)的難度。
(1)不同平臺(tái)之間的差異性
軟件開發(fā)中的編程語言并不能直接地作用于計(jì)算機(jī)硬件設(shè)備,它們需要調(diào)用系統(tǒng)的API接口來實(shí)現(xiàn)對計(jì)算機(jī)的控制操作,然而目前許多操作平臺(tái)的API接口都有自己的標(biāo)準(zhǔn),并且相互之間差異性較大,例如Windows系統(tǒng)和Unix系統(tǒng)之間的API接口的實(shí)現(xiàn)方式和實(shí)現(xiàn)原理都不一樣,這就在很大程度上阻礙了同一款軟件應(yīng)用于不同平臺(tái)。在實(shí)際開發(fā)過程中,操作平臺(tái)的差異性會(huì)貫穿始終,從設(shè)計(jì)、代碼編寫到最終測試都會(huì)涉及。
(2)編譯器的定義不同
編譯器的主要功能是根據(jù)特定的語言定義將源代碼轉(zhuǎn)變成為可執(zhí)行控制的指令,它顯然和C++語言的跨平臺(tái)應(yīng)用有著十分巨大的關(guān)聯(lián),由于語言定義的不同,同一種源代碼在不同的編譯器中最終得到的控制指令也不盡相同,這也就造成了跨平臺(tái)軟件開發(fā)難以開展實(shí)現(xiàn)。例如目前Windows平臺(tái)上的Visual Studio C++編譯器和Linux平臺(tái)上的GCC編譯器適用于C++程序代碼的編譯,然而由于C++的許多語言特性的實(shí)現(xiàn)細(xì)節(jié)都留給了編譯器開發(fā)商,每個(gè)開發(fā)商對編譯器的定義不同,從而致使C++源代碼不能跨平臺(tái)編譯。
(3)編譯系統(tǒng)的不同
編譯系統(tǒng)可以簡單到一個(gè)執(zhí)行編譯器和連接器的命令腳本,也可以復(fù)雜到整個(gè)命令程序的生成??缙脚_(tái)的軟件開發(fā)必須要使用一個(gè)統(tǒng)一標(biāo)準(zhǔn)的編譯系統(tǒng),這樣才能達(dá)到對程序代碼執(zhí)行的一致性。例如Windows系統(tǒng)下的Visual Studio和Apple的Interface Builder編譯系統(tǒng)完全束縛了跨平臺(tái)編譯系統(tǒng)的開發(fā),這兩者之間的編譯定義、指令執(zhí)行都有著十分巨大的差別,往往同一個(gè)源代碼在各編譯系統(tǒng)中得到的編譯結(jié)果也完全不同,這也就導(dǎo)致跨平臺(tái)軟件開發(fā)無從談起。
2 C++語言跨平臺(tái)軟件開發(fā)的設(shè)計(jì)實(shí)現(xiàn)
C++語言跨平臺(tái)軟件開發(fā)的實(shí)現(xiàn)還存在著一些因素的阻礙,因此,采取何種方法措施清除這些影響因素是實(shí)現(xiàn)跨平臺(tái)軟件開發(fā)的關(guān)鍵。
(1)避免語言的擴(kuò)展特性
許多語言為了滿足軟件開發(fā)的需求,往往會(huì)增添新的擴(kuò)展特性,然而新的特性由于缺乏長期的實(shí)踐性和規(guī)范性,經(jīng)常出現(xiàn)沒有被確切測試和精確定義的意外情況,其中常常包含著許多的異常漏洞和非標(biāo)準(zhǔn)內(nèi)容,另外跨平臺(tái)開發(fā)對于程序的異常十分敏感,稍有瑕疵就難以排除障礙,因此,在實(shí)際的軟件開發(fā)過程中應(yīng)當(dāng)使用C++的標(biāo)準(zhǔn)特性而避免使用其擴(kuò)展特性。
(2)建立跨平臺(tái)代碼庫
在跨平臺(tái)軟件開發(fā)過程中,通常會(huì)遇到某些特性定義一個(gè)平臺(tái)上有而另一個(gè)平臺(tái)上沒有的問題,例如Windows平臺(tái)有樹形控件和遞歸互斥體,DOS下沒有線程,Linux下的線程是依據(jù)進(jìn)程來實(shí)現(xiàn),因此這就需要建立跨平臺(tái)代碼庫來解決這一問題,通過建立一套完善的跨平臺(tái)代碼庫來實(shí)現(xiàn)某些特性統(tǒng)一化。
(3)采用腳本文件進(jìn)行管理
一般來說,軟件開發(fā)過程中將會(huì)編寫大量的代碼,特別是涉及到跨平臺(tái)領(lǐng)域時(shí),這一問題就顯現(xiàn)地格外嚴(yán)重,因此為了是代碼編寫更加簡單明了,通常使用腳本文件進(jìn)行管理。利用腳本文件在程序編譯之前將相關(guān)文件從中剝離出來,并分配到合適的位置上,然后再應(yīng)用程序的運(yùn)行過程中,再從配置文件中讀取所需要的配置選項(xiàng),另外在軟件開發(fā)過程中要盡量隔離平臺(tái)依賴程度較高的文件格式,而是采用腳本文件來進(jìn)行可控管理。
總而言之,隨著廣大用戶對軟件便利性和實(shí)用性功能的渴求,跨平臺(tái)軟件開發(fā)設(shè)計(jì)將會(huì)成為軟件工程中的一門重要分支,同時(shí)也將是今后軟件工程發(fā)展的方向趨勢。
參考文獻(xiàn)
[1] 羅莎.計(jì)算機(jī)中C語言的應(yīng)用特點(diǎn)分析[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012(05).
[2] 楊鵬.基于C++語言的跨平臺(tái)軟件開發(fā)的設(shè)計(jì)[J].硅谷,2014(02).