官术网_书友最值得收藏!

1.1.4 跨平臺開發(fā)

主流開發(fā)平臺

在上一節(jié),我們介紹了目前的主流操作系統由3大桌面系統(Windows、macOS、Linux),以及兩大移動終端系統(iOS和Android)組成。RTC的設計目標應該要能兼容這5大系統的不同之處。

對程序員而言,不同的操作系統對應著不同的首選IDE、編譯器和SDK(Software Development Kit,軟件開發(fā)包),如表1-1所示。

表1-1 不同操作系統的首選IDE、編譯器和SDK

img

我們希望使用一份C++代碼,就能適應不同環(huán)境下的基本編譯環(huán)境。

跨平臺編譯

如何自動識別當前代碼是在哪個平臺編譯的呢?

我們知道,每個平臺的編譯器都有一些獨一無二的預定義宏(Predefined Marcos)。借助這些預定義宏,并假設我們在各個平臺都使用官方推薦的開發(fā)環(huán)境,就可以識別當前的平臺。

例如,微軟的MSVC編譯器會定義_MSC_VER宏;Android的Clang編譯器會定義__ANDROID__宏。

所以,我們自動區(qū)分5個平臺的示例代碼如下:

img
img

我們可以在各個平臺的差異文件中,配置各個編譯器的特有屬性及平臺特有屬性。

例如,在Windows平臺上:

img

在iOS平臺上:

img

基本類型

由于歷史原因,在各種編譯器下,C語言的基本類型的長度會有少量不一致。尤其注意wchar_t和long類型在不同系統中的長度。

我們使用DTypes.h來定義自己的基本類型,屏蔽類型長度的不一致。

img

借助DConfig.h和DType.h,我們可以屏蔽C++代碼在平臺與編譯器上的差別。

Hello World

作為本書的第一個代碼示例,我們將實現一個跨平臺的Hello程序,它會在不同的平臺上顯示不同的Hello提示。

我們設計一個跨平臺隔離的C++類DXP[7],并為其封裝兩個static方法。

img

主程序如下:

img

上述代碼在Windows上會輸出Hello Windows\r\n。而在macOS上則會輸出Hello macOS\n。

在下一節(jié),我們將在此基礎上實現一個跨平臺的緩存管理類。

總結

在本節(jié),我們簡要地回顧了從古至今人類傳遞信息的各種方式。借助電與電磁波,人們有了高速傳遞信息的載體。借助計算機與互聯網,人們有了操作信息的設備與傳播信息的渠道。操作系統與智能手機的普及,讓每個人都能隨時隨地參與信息的生產與消費。為了能屏蔽各個編程平臺的差異,我們使用了預定義宏,并定義了一個通用類型系統。

活在信息時代的我們,一出生就被各種信息圍繞。人的一生會接觸各種各樣的信息,我們需要了解信息、辨別信息、善用信息。這些是我們做決策賴以依據的根基。

在計算機中,信息都是用二進制數的0和1存儲的。我們將在下一節(jié)具體介紹。

要點回顧

·計算機誕生前的通信技術。

·計算機的誕生與互聯網的興起。

·各種操作系統的特點。

·使用預定義宏識別編譯平臺。

·使用類型定義統一基本類型。

·實現跨平臺的print函數。

參考閱讀

1.《計算機發(fā)展簡史》(1985年),陳厚云等編著。該書有非常多的史料細節(jié)。

2.Media Technology and Society(1998年),Brian Winston著。該書記錄了從電報到互聯網的各種歷史發(fā)展與參考。其中提到,1665年,英國的羅伯特·胡克(Robert Hooke,1635—1703)提出了借助一根特制的電線瞬間傳遞一個聲音的想法,這應該是最早的關于電話的設想。

3.《邏輯的引擎》(2005年),馬丁·戴維斯著,張卜天譯。該書描述多個數學家為計算機誕生所做的貢獻。

4.《穿越計算機的迷霧》(2011年),李忠。該書用通俗易懂的語言講述了計算機誕生前夜的故事。2018年出版了第二版。

5.F.P.Brooks另一本著作《設計原本》(The Design of Design),也是軟件工程領域的經典。

6.《觀止·Windows NT》講述了Windows NT系統誕生的過程。

7.《離心力:互聯網歷史與數字化未來》(A History of the Internet and the Digital Future)(2018年),Johnny Ryan著,段鐵錚譯。該書提供了互聯網誕生的許多背景材料。

8.有關CPU的指令介紹,可以在線下載Intel的編程手冊[8]

9.Windows平臺上的開發(fā)資料

(1)《Windows核心編程》,Jeffery Richter著,是學習kernel32.dll主要函數的首選圖書。

(2)《Windows程序設計》,Charles Petzold著,是學習user32.dll主要函數的首選圖書。

(3)《Windows圖形編程》,Feng Yuan著,是學習gdi32.dll主要函數的首選圖書。

10.Linux下的開發(fā)資料

(1)《鳥哥的Linux私房菜》基礎學習篇,是學習Linux命令行不錯的入門材料。

(2)The UNIX Programming Environment(1983年),Brian W.Kernighan,Rob Pike著。

(3)Advanced Programming in the UNIX Environment3rd(2013年),W.Richard Stevens,Stephen A.Rago著。

11.iOS的開發(fā)資料

(1)iOS Programming:The Big Nerd Ranch Guide(2020年),Christian Keur,Aaron Hillegass著。

(2)Programming iOS 14(2021年),Matt Neuburg著。

12.macOS的開發(fā)資料

(1)OS X and iOS Kernel Programming(2011年),Ole Henry Halvorsen,Douglas Clarke著。

(2)*OS Internals,Volume I(2017年);Volume II(2019年),Jonathan Levin著。

13.Android的開發(fā)資料

(1)Android Programming:The Big Nerd Ranch Guide(2019年),Bill Phillips,Chris Stewart,Kristin Marsicano著。

練習題

1.[5分鐘](通信概念)什么是通信?人們?yōu)槭裁匆ㄐ牛抗湃藶榱送ㄐ哦际褂昧四男┓椒ǎ?/p>

2.[10分鐘](信鴿速率)古代人通過信鴿傳遞消息,調查一下其傳輸速率。

3.[10分鐘](首份電報內容)上網查閱一下第一份電報的內容是什么。

4.[2小時](計算機發(fā)明史)計算機是如何發(fā)明的?有哪些關鍵事件?

5.[2小時](Wi-Fi發(fā)明人)Wi-Fi中的跳頻技術是誰發(fā)明的?有何用途?

6.[10分鐘](桌面系統版本)查看自己的Windows/macOS桌面系統使用的是什么版本?

7.[10分鐘](手機系統版本)查看自己的手機使用的是什么系統?什么版本?

8.[30分鐘](RFC查詢與閱讀)使用Web瀏覽器查閱第一份RFC的協議內容,并學習如何檢索其他RFC文檔。

9.[3人天](Linux命令)學習使用Linux命令,并編寫一個Shell腳本,用于打印系統的版本號、CPU、內存、硬盤等信息。

10.[5人天](iOS編程)編寫一個iOS App,盡可能多地顯示當前系統的信息與用戶設置。

11.[5人天](Android編程)編寫一個Android App,盡可能多地顯示當前系統的信息與用戶設置。

12.[2人天](類型單元測試)為DTypes.h文件編寫一個UT(Unit Test)文件,測試各個平臺下基本類型的長度是否符合預期。

主站蜘蛛池模板: 子长县| 漳州市| 泸水县| 鹤峰县| 津南区| 中方县| 正宁县| 镇原县| 定兴县| 宁津县| 邵阳市| 连州市| 永城市| 自治县| 拉萨市| 横山县| 天水市| 贞丰县| 高安市| 竹溪县| 抚宁县| 庄浪县| 吉安市| 清水河县| 沧州市| 合阳县| 卢氏县| 阿尔山市| 财经| 静海县| 商丘市| 金平| 兰州市| 秭归县| 凤山市| 苍溪县| 泰兴市| 西吉县| 濮阳市| 新绛县| 通山县|