1.1 編程語言簡介前端
(1)機器語言。機器語⾔是直接經過⼗六進制數表⽰當前處理器架構的機器指令碼。指令碼包含了當前指令的功能(⽐如算術邏輯運算、移位、分⽀、中斷、I/O等)、寄存器、⽴即數等多種元素。每種處理器架構所對應的機器碼的字節長度也各不相同,有些是固定長度的(⽐如ARM、MIPS等架構),有些是可變長度的(⽐如x86架構)。程序員
(2)彙編語言。彙編語⾔(Assembly Language)經過簡單的指令助記符(memonics)來表⽰對應機器指令的功能、寄存器編號、⽴即數(immediates)等元素。彙編語⾔是對機器指令的簡單抽象,經過彙編器(assembler)能夠將彙編語句翻譯成對應的機器指令碼。算法
(3)高級語言。⾼級語⾔的表達形式更爲抽象且貼近咱們⽇常的語⾔表述。⽽且,⾼級語⾔⽐起彙編語⾔每每更具備表達⼒,且擁有更加豐富的語法特性,以便將程序進⾏結構化和模塊化。⽐如,⾼級語⾔具備⾃定義變量標識符、⾃定義數據結構、分⽀與循環、更形象⾃然的表達式等。⾼級語⾔⼀般經過編譯器(compiler)可直接將表達式翻譯爲對應的機器指令碼;也能夠將⾼級語⾔先翻譯爲中間語⾔(相似於彙編,但可能⽐彙編適⽤範圍更⼴、更利於跨平臺的字節碼),最後將中間語⾔翻譯爲最終的機器指令碼。C語言是一種高級語言。對於⾼級語⾔來講,從表達上又可分爲命令式編程語⾔(imperative programming language)和陳述型編程語⾔(declarative programming language)。命令式語⾔主要包括過程式(procedural)、結構化(structured)以及⾯向對象(object-oriented)的編程語⾔;陳述型編程語⾔主要包括函數式(functional)以及邏輯型(logical)編程語⾔。⽽C語⾔則屬於結構化的命令式編程語⾔。不過如今不少命令式編程語⾔也包含了⼀些函數式編程語⾔的特徵。編程
1.2 C語言的歷史vim
1963年,英國劍橋大學推出了CPL(Combined Programming Langurage)語言,它是一種無類型(typeless)編程語言。1967年,劍橋大學的Matin Richards在CPL的基礎上開發出了BCPL(Basic Combined Programming Language)語言。1969年,美國貝爾實驗室的計算機科學家肯·湯普遜(Ken Thompson)在丹尼斯·利奇(Dennis Ritchie)的支持下設計出了B語言。1969年到1972年,Dennis Ritchie爲了從新實現Unix操做系統,在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母做爲這種語言的名字,這就是C語言。後端
1.3 C語言的發展數組
1989年,美國國家標準協會(ANSI)對C語言進行了標準化,這就是ANSI C。1990年,國際標準化組織(ISO)採納了ANSI C,標準號爲ISO/IEC 9899: 1990,這就是ISO C。ANSI C和ISO C是徹底相同的標準,既能夠稱爲C89,又能夠稱爲C90。安全
1994年,ANSI/ISO聯合委員會開始着手修訂C標準。1999年,這個委員會正式發佈了ISO/IEC 9899:1999標準,即C99標準。C99標準引入了許多特性,包括內聯函數(inline functions)、可變長度的數組、靈活的數組成員(用於結構體)、複合字面量、指定成員的初始化器、對IEEE754浮點數的改進、支持不定參數個數的宏定義,在數據類型上還增長了long long int以及複數類型。委員會的目標還不是添加新特性,而是爲了達到新的目標。第一個目標是,支持國際化編程,例如提供多種方法處理國際字符集。第二個目標是,「調整現有實踐致力於解決明顯的缺陷」,所以,在遇到須要將C移植至64位處理器時,委員會根據現實須要來添加標準。第三個目標是,爲適應科學和工程項目中的關鍵數字計算,提升C的適應性,讓C比Fortran更有競爭力。雖然C99標準已經發布了很長時間,但並不是全部的編譯器都徹底實現了C99標準的內容,即使是GCC和Clang編譯器也只支持到90%以上,而微軟的Visual Studio中的C編譯器只能支持到70%左右。服務器
2007年,C語言標準委員會又開始修訂C語言標準,直到2011年正式發佈了ISO/IEC 9899:2011,即C11標準。C11標準新引入的特徵儘管沒C99相對C90引入的那麼多,可是這些也都十分有用,好比:字節對齊說明符、泛型機制(generic selection)、對多線程的支持、靜態斷言、原子操做以及對Unicode的支持。這次,委員會提出了一些新的指導原則。出於對當前編程安全的擔心,不那麼強調「信任程序員」的目標了。並且,供應商並未像C90那樣很好地接受和支持C99,這使得C99的一些特性成爲C11的可選項。由於委員會認爲,不該要求服務小型機市場的供應商支持其目標環境中用不到的特性。另外須要強調的是,修訂標準的緣由不是由於原標準不能用,而是須要跟進新的技術。例如,新標準添加了可選項支持當前多處理器的計算機。數據結構
1.4 爲何要使用C語言
在過去40多年裏,C語言已經成爲最重要、最流行的編程語言之一。它的成長歸功於使用過的人都對它很滿意。過去20多年裏,雖然出現了不少新興的編程語言(例如C++、Objective C、Java、Go、Swift、Rust等),可是C語言仍憑藉自身實力作到了屹立不倒,在最新的世界編程語言排行榜(TOIBE)上,C語言仍然是首屈一指的編程語言。
使用C語言的理由:
(1)可移植性。C是可移植的語言。這意味着,在一種系統中編寫的C程序稍做修改甚至不用修改就能在其它系統運行。C語言被設計出來的一大初衷就是爲了能將同一個源代碼放到各個不一樣的平臺運行。所以,若是咱們的代碼要在多種不一樣架構的處理器上運行的話,咱們就得注意C語言標準規定了哪些特性是編譯器必須遵照的,哪些特性是平臺或編譯器本身實現的。咱們要儘可能使用標準中已明文規定的編程規範,儘量避免在不一樣平臺可能會產生不一樣行爲的語法特性。固然,因爲上面提到的處理器種類太過多樣,尤爲在嵌入式開發領域,不少MCU用的還都是8位處理器,這種狀況下C源代碼就很難被移植到32位或64位系統下了。
(2)可維護性。可維護性在實際工程項目的研發中很是重要。它體如今最初工程架構的設計、對各個功能模塊的劃分、相應的開發人員安排,還有後期的測試。通常來講,如今一個工程若是是從無到有進行開發的話會採用螺旋式開發模型。也就是說,一個項目啓動後,能夠先作一個功能簡單但能正常工做的產品原型。而後在此基礎上不斷地爲它增長更多功能,或對以前的功能進行修改。在此期間,咱們如何對整個工程進行模塊化劃分,從而能安排不一樣開發人員針對不一樣功能模塊進行開發就變得尤其重要。另外,在工程開發過程當中,若是有人員流動,那麼如何將即將離職的開發人員手中的工做交付給新人也關係到整個項目的進展。所以,一個良好的C語言代碼應該具備可讀性、良好的文檔化註釋風格,以及較詳細的設計文檔。對於一個較大的工程項目來講,開發人員不只僅須要把本身的代碼寫好,並且要寫得能讓別人看懂,而且要作好詳細的設計文檔,這樣才能把項目風險下降。
(3)可延展性。你們或許已經知道,像微軟的Windows操做系統由數千名工程師合做研發;Linux操做系統對外開源,參與其中的研發人員也有數百上千人。若是咱們在一個開發團隊中負責一個須要由多人合做開發的工程項目,那麼咱們寫的功能模塊須要與其餘人寫的功能模塊進行對接。因此,咱們在開發一個較大工程項目時,須要協調好各自對外的模塊接口(Application Program Interface,API)。因爲C語言沒有全局名字空間(namespace)這個概念,因此命名一個對外接又也是很是重要的,不然可能會與其餘功能模塊的接又名發生衝突。
(4)性能。性能是提高程序使用者效率和生產力的體現。一個應用程序的性能越高,那麼計算一個任務所花費的時間越短,也越節省計算機的耗電。而對於如何提高性能,一方面須要程序員對處理器架構、硬件特性有必定了解;另外一方面須要程序員擁有比較豐富的算法知識,能針對實際需求靈活採用高效的算法。而像C語言這種十分接近硬件底層的高級編程語言,能極大限度地發揮處理器的特長,從而達到高效的運行性能。
1.5 C語言的缺點
人無完人,金無足赤。C語言也有一些缺點。例如,要享受用C語言自由編程的樂趣,就必須承擔更多的責任。特別是,C語言使用指針,而涉及指針的編程錯誤每每難以察覺。有句話說的好:想擁有自由就必須時刻保持警戒。
1.6 C語言的應用範圍
雖然這些年來C++和JAVA很是流行,可是C語言還是軟件業中的核心技能。在最想具有的技能中,C語言一般位居前十。特別是,C語言已成爲嵌入式系統編程的流行語言。也就是說,愈來愈多的汽車、照相機、DVD播放機和其餘現代化設備的微處理器都用C語言進行編程。除此以外,C語言還從長期被FORTRAN獨佔的科學編程領域分得一杯羹。最終,做爲開發操做系統的卓越語言,C在Linux開發中扮演着極其重要的角色。所以,在進入21世紀的第2個10年中,C語言仍然保持着強勁的勢頭。
1.7 主流C語言編譯器介紹
對於當前主流桌面操做系統而言,可以使用Visual C++、GCC以及LLVM Clang這三大編譯器。其中,Visual C++(簡稱MSVC)只能用於Windows操做系統;其他兩個,除了可用於Windows操做系統以外,主要用於Unix/Linux操做系統。像如今不少版本的Linux都默認使用GCC做爲C語言編譯器。而像FreeBSD、macOS等系統默認使用LLVM Clang編譯器。因爲當前LLVM項目主要在Apple的主推下發展的,因此在macOS中,Clang編譯器又被稱爲Apple LLVM編譯器。MSVC編譯器主要用於Windows操做系統平臺下的應用程序開發,它不開源。用戶可使用VisualStudio Community版原本無償使用它,可是若是要把經過Visual Studio Community工具生成出來的應用進行商用,那麼就得好好閱讀一下微軟的許可證和說明書了。而使用GCC與Clang編譯器構建出來的應用通常沒有任何限制,程序員能夠將應用程序隨意發佈和進行商用。不過因爲MSVC編譯器對C99標準的支持就十分有限,加之它壓根不支持任何C11標準,因此本書的代碼例子不會針對MSVC進行描述。所幸的是,Visual Studio Community 2017加入了對Clang編譯器的支持,官方稱之爲——Clang with Microsoft CodeGen,當前版本基於的是Clang 3.8。也就是說,應用於Visual Studio集成開發環境中的Clang編譯器前端可支持Clang編譯器的全部語法特性,然後端生成的代碼則與MSVC效果同樣,包括像long整數類型在64位編譯模式下長度仍然爲4個字節,因此各位使用的時候也須要注意。
而在嵌入式系統方面,可用的C語言編譯器就很是豐富了。好比用於Keil公司51系列單片機的Keil C51編譯器;當前大紅大紫的Arduino板搭載的開發套件,可用針對AVR微控制器的AVR GCC編譯器;ARM本身出的ADS(ARM Development Suite)、RVDS(RealView Development Suite)和當前最新的DS-5 Studio;DSP設計商TI(Texas Instruments)的CCS(Code Composer Studio);DSP設計商ADI(Analog Devices,Inc.)的Visual DSP++編譯器,等等。一般,用於嵌入式系統開發的編譯工具鏈都沒有免費版本,並且通常須要經過國內代理進行購買。因此,這對於我的開發者或者嵌入式系統愛好者而言是一道不低的門檻。不過Arduino的開發套件是可免費下載使用的,而且用它作開發板鏈接調試也十分簡單。Arduino所採用的C編譯器是基於GCC的。還有像樹莓派(Raspberry Pi)這
種迷你電腦能夠直接使用GCC和Clang編譯器。此外,還有像nVidia公司推出的Jetson TK系列開發板也可直接使用GCC和Clang編譯器。樹莓派與Jetson TK都默認安裝了Linux操做系統。在嵌入式領域,通常比較低端的單片機,好比8位的MCU所對應的C編譯器可能只支持C90標準,有些甚至連C90標準的不少特性都不支持。由於它們一方面內存小,ROM的容量也小;另外一方面,自己處理器機能就十分有限,有些甚至沒法支持函數指針,由於處理器自己不包含經過寄存器作間接過程調用的指令。而像32位處理器或DSP,通常都至少能支持C99標準,它們自己的性能也十分強大。而像ARM出的RVDS編譯器甚至可用GNU語法擴展。
1.8 GNU規範的語法擴展
GNU是一款能用於構建類Unix操做系統的計算機軟件合集,由自由軟件之父Richard Stallman開創,於1983年9月27日對外發布。GNU徹底由自由軟件(free software)構成。GNU語法擴展源自於GCC編譯器,在1987年發佈1.0版本,稱爲GNU C Compiler。隨後,GCC編譯器前端支持了C++、Objective-C/C++、Fortran、Ada、Java以及最近躍升的Go等編程語言,所以如今GCC被稱爲GNU Compiler Collection。因爲在20世紀90年代,GNU C編譯器就對C90標準作了至關多的語法擴展,包括複合字面量、匿名結構體和數組、可指定的初始化器等,這些語法擴展被普遍使用,尤爲是大量用於Linux內核代碼中,所以C99標準將這些語法特性全都列入標準之中。
正由於GCC自己是開源自由軟件,所以不少商用編譯器也基於GCC進行擴展。像ARM的RVCT(RealView Compiler Toolkit)自己就支持GNU擴展。還有很多開發平臺自己就直接使用GCC編譯工具。因爲有很多大公司頂級開發人員的參與,所以GCC編譯器的目標代碼優化能力至關高,並且還支持許多不一樣的處理器。因此,GCC當前被普遍使用並博得開發者的好評。像Linux操做系統基本默認使用GCC做爲默認編譯器,包括Android的NDK開發工具一開始也是如此。
然而,因爲GCC基於比較嚴格的GPL許可證,許多大型商業開發商對它望而卻步。該許可證容許使用者無償使用軟件,可是要求不能隨意對它進行篡改並從新發布。若是開發者對它進行篡改,而後發佈本身修改以後的軟件,那麼必需要把本身修改的那部分也開源出來。所以,在2003年誕生了一個LLVM開源項目,基於更爲寬鬆的BSD許可證,其編譯器稱爲Clang。BSD許可證容許開發者隨意對軟件進行修改並從新發布,甚至能夠將修改過的版本做爲自主版權,於是這個許可證深受大公司的歡迎。如今Apple對LLVM項目的投入很是大。macOS上的開發工具Xocde從4.0版本起就開始使用Clang編譯工具鏈,隨後Apple將本身改寫的Clang編譯器稱爲Apple LLVM。當前最新的Xcode 8所使用的Apple LLVM版本爲8.x。而當前Android NDK也支持了Clang編譯器工具鏈。Clang編譯器並不是基於GCC,它是從頭開始寫的。可是它的目標是儘可能與GCC編譯器兼容,因此Clang編譯器包含大部分GNU語法擴展,除此以外還含有它本身特有的C語言擴展。固然也有一些特性是GCC含有而Clang不具有的,不過這些特性通常不多使用。
咱們如今能夠看到GNU語法擴展適用性十分普遍。若是讀者當前在作Linux/Unix或Windows上的C語言編程開發,或者是在開發macOS/iOS應用,又或者是在開發Android應用,那麼徹底能夠毫無顧忌地使用GNU語法擴展。Clang編譯器已經包含了大部分GNU語法擴展,所以在介紹GCC語法擴展的時候,若是當前特性Clang不支持,則會指明。
1.9 使用C語言的流程步驟
C是編譯型語言。若是以前使用過編譯型語言(如,Pascal、Fortran、C++、Go、Rust),就會很熟悉組建C程序的幾個基本步驟。可是,若是之前使用的是解釋型語言(如,Basic、JavaScript、Java、C#、Python、Ruby)或面向圖形界面語言(如,Visual Basic),或者甚至沒接觸過任何編程語言,就有必要學習如何編譯。
C語言編程通常分爲7步:
第1步:定義程序的目標。
在動手寫程序以前,要在腦中有清晰的思路。想要程序去作什麼首先本身要明確本身想作什麼,思考你的程序須要哪些信息,要進行哪些計算和控制,以及程序應該要報告什麼信息。在這一步驟中,不涉及具體的計算機語言,應該用通常術語來描述問題。
第2步:設計程序。
對程序應該完成什麼任務有概念性的認識後,就應該考慮如何用程序來完成它。例如,用戶界面應該是怎樣的?如何組織程序?目標用戶是誰?準備花多長時間來完成這個程序?
除此以外,還要決定在程序(還多是輔助文件)中如何表示數據,以及用什麼方法處理數據。學習C語言之初,遇到的問題都很簡單,沒什麼可選的。可是,隨着要處理的狀況愈來愈複雜,須要決策和考慮的方面也愈來愈多。一般,選擇一個合適的方式表示信息能夠更容易地設計程序和處理數據。
再次強調,應該用通常術語來描述問題,而不是用具體的代碼。可是,你的某些決策可能取決於語言的特性。例如,在數據表示方面,C的程序員就比Pascal的程序員有更多選擇。
第3步:編寫代碼。
設計好程序後,就能夠編寫代碼來實現它。也就是說,把你設計的程序翻譯成C語言。這裏是真正須要使用C語言的地方。能夠把思路寫在紙上,可是最終仍是要把代碼輸入計算機。這個過程的機制取決於編程環境,咱們稍後會詳細介紹一些常見的環境。通常而言,使用文本編輯器建立源代碼文件。該文件中內容就是你翻譯的C語言代碼。程序清單1.1是一個C源代碼的示例。
程序清單1.1 C源代碼示例
#include <stdio.h> int main(void) { int cats; printf("How many cats do you have?\n"); scanf("%d", &cats); printf("So you have %d cat(s)!\n", cats); return 0; }
在這一步驟中,應該給本身編寫的程序添加文字註釋。最簡單的方式是使用C的註釋工具在源代碼中加入對代碼的解釋。
第4步:編譯。
接下來的這一步是編譯源代碼。再次提醒讀者注意,編譯的細節取決於編程的環境,咱們稍後立刻介紹一些常見的編程環境。如今,先從概念的角度講解編譯發生了什麼事情。
前面介紹過,編譯器是把源代碼轉換成可執行代碼的程序。可執行代碼是用計算機的機器語言表示的代碼。這種語言由數字碼表示的指令組成。如前所述,不一樣的計算機使用不一樣的機器語言方案。C編譯器負責把C代碼翻譯成特定的機器語言。此外,C編譯器還將源代碼與C庫(庫中包含大量的標準函數供用戶使用,如printf()和scanf())的代碼合併成最終的程序(更精確地說,應該是由一個被稱爲連接器的程序來連接庫函數,可是在大多數系統中,編譯器運行連接器)。其結果是,生成一個用戶能夠運行的可執行文件,其中包含着計算機能理解的代碼。
編譯器還會檢查C語言程序是否有效。若是C編譯器發現錯誤,就不生成可執行文件並報錯。理解特定編譯器報告的錯誤或警告信息是程序員要掌握的另外一項技能。
第5步:運行程序。
傳統上,可執行文件是可運行的程序。在常見環境(包括Windows命令提示符模式、UNIX終端模式和Linux終端模式)中運行程序要輸入可執行文件的文件名,而其餘環境可能要運行命令(如,在VAX中的VMS[2])或一些其餘機制。例如,在Windows和Macintosh提供的集成開發環境(IDE)中,用戶能夠在IDE中經過選擇菜單中的選項或按下特殊鍵來編輯和執行C程序。最終生成的程序可經過單擊或雙擊文件名或圖標直接在操做系統中運行。
第6步:測試和調試程序。
程序能運行是個好跡象,但有時也可能會出現運行錯誤。接下來,應該檢查程序是否按照你所設計的思路運行。你會發現你的程序中有一些錯誤,計算機行話叫做bug。查找並修復程序錯誤的過程叫調試。學習的過程當中不可避免會犯錯,學習編程也是如此。所以,當你把所學的知識應用於編程時,最好爲本身會犯錯作好心理準備。隨着你愈來愈老練,你所寫的程序中的錯誤也會愈來愈不易察覺。
未來犯錯的機會不少。你可能會犯基本的設計錯誤,可能錯誤地實現了一個好想法,可能忽視了輸入檢查致使程序癱瘓,可能會把圓括號放錯地方,可能誤用C語言或打錯字,等等。把你未來犯錯的地方列出來,這份錯誤列表應該會很長。
看到這裏你可能會有些絕望,可是狀況沒那麼糟。如今的編譯器會捕獲許多錯誤,並且本身也能夠找到編譯器未發現的錯誤。在學習本書的過程當中,咱們會給讀者提供一些調試的建議。
第7步:維護和修改代碼。
建立完程序後,你發現程序有錯,或者想擴展程序的用途,這時就要修改程序。例如,用戶輸入以Zz開頭的姓名時程序出現錯誤、你想到了一個更好的解決方案、想添加一個更好的新特性,或者要修改程序使其能在不一樣的計算機系統中運行,等等。若是在編寫程序時清楚地作了註釋並採用了合理的設計方案,這些事情都很簡單。
1.10 C語言程序的組成
C編程的基本策略是,用程序把源代碼文件轉換爲可執行文件(其中包含可直接運行的機器語言代碼)。典型的C實現經過編譯和連接兩個步驟來完成這一過程。編譯器把源代碼轉換成中間代碼,連接器把中間代碼和其餘代碼合併,生成可執行文件。C使用這種分而治之的方法方便對程序進行模塊化,能夠獨立編譯單獨的模塊,稍後再用連接器合併已編譯的模塊。經過這種方式,若是隻更改某個模塊,沒必要所以從新編譯其餘模塊。另外,連接器還將你編寫的程序和預編譯的庫代碼合併。
中間文件有多種形式。咱們在這裏描述的是最廣泛的一種形式,即把源代碼轉換爲機器語言代碼,並把結果放在目標代碼文件(或簡稱目標文件)中(這裏假設源代碼只有一個文件)。雖然目標文件中包含機器語言代碼,可是並不能直接運行該文件。由於目標文件中儲存的是編譯器翻譯的源代碼,這還不是一個完整的程序。
目標代碼文件缺失啓動代碼(startup code)。啓動代碼充當着程序和操做系統之間的接口。例如,能夠在MS Windows或Linux系統下運行IBM PC兼容機。這兩種狀況所使用的硬件相同,因此目標代碼相同,可是Windows和Linux所需的啓動代碼不一樣,由於這些系統處理程序的方式不一樣。
目標代碼還缺乏庫函數。幾乎全部的C程序都要使用C標準庫中的函數。例如,concrete.c中就使用了printf()函數。目標代碼文件並不包含該函數的代碼,它只包含了使用printf()函數的指令。printf()函數真正的代碼儲存在另外一個被稱爲庫的文件中。庫文件中有許多函數的目標代碼。
連接器的做用是,把你編寫的目標代碼、系統的標準啓動代碼和庫代碼這3部分合併成一個文件,便可執行文件。對於庫代碼,連接器只會把程序中要用到的庫函數代碼提取出來。
1.11 集成開發環境(IDE)和編輯器
集成開發環境(IDE)提供了一整套的工具鏈,提供了從編寫代碼到編譯程序和調試程序一條龍服務。而編輯器只提供了編寫代碼的功能,編譯程序和調試程序要在命令行(也稱終端)來作。
你們可能會問,既然有了如此方便的集成開發環境,爲何還要學習編輯器和命令行呢?緣由有二:
(1)熟悉命令行是一項必要的技能。不要過於依賴IDE,在Linux/Unix這類操做系統上尤爲如此。誠然,咱們有Visual Studio、Eclipse、IDEA、NetBeans等方便的IDE能夠用,可是,對於C語言編程的內部原理咱們也須要了解,編輯器和命令行工具能爲咱們揭示其中的奧祕。編輯器分爲基於圖形用戶界面(GUI)的編輯器和基於命令行(終端)的編輯器。好比,Windows上的記事本(notepad)和macOS上的文本編輯和Linux上的gedit就是一些具備基本功能的,基於圖形用戶界面的文本編輯器(固然,還有許多專門爲編程而開發的文本編輯器)。基於命令行(終端)界面的編輯器有macOS和Linux上的nano/pico,固然,若是你願意花更多的時間去學習vi/vim,也是不錯的。在macOS/Linux上,C語言編譯的任務用clang/gcc來完成,調試的任務用lldb/gdb來完成,這些都是基於命令行的工具。
(2)命令行適合於遠程開發和調試。好比,有一個程序的源代碼須要(遠程)修改,你總不能說,等我開個遠程桌面,打開Visual Studio來修改吧,固然這樣是能夠的,可是對於服務器來講,太消耗資源了,效率也很低下,並且,不少服務器的操做系統根本就沒有圖形界面。這時候,開個ssh,使用命令行工具編輯、編譯並調試就是理所固然的事了。
1.12 本書使用的開發環境
操做系統是64位的Ubuntu Linux 18.10,編譯器是Clang 7.0或GCC 8.2,集成開發環境使用的是安裝了C/C++開發插件的Eclispe,固然,你能夠直接使用Eclipse C/C++開發套件。