- C語言編程魔法書:基于C11標準
- 陳軼
- 6502字
- 2019-01-05 01:58:58
第3章
C語言編程的環境搭建
我們在第2章講述了學習C語言所必需的一些預備知識。本章將給大家介紹常用桌面操作系統下的C語言環境搭建。這里所講述的C語言編譯器以及集成開發環境(IDE)都是可合法免費下載的,本書不鼓勵各位使用盜版或破解軟件,所以下面會列出下載這些合法免費軟件的官方鏈接,大家把編程環境搭建完之后即可上機實踐編程。
3.1 Windows操作系統下搭建C語言編程環境
Windows操作系統下默認不自帶任何C語言編譯器,大家必須從網上下載自己所需要的C語言編譯器。如果各位想通過C語言開發Windows系統平臺相關的應用,或者主要想在Windows平臺對C語言程序進行調試,那么往往首選Visual Studio Community。這款開發環境是免費的,里面自帶了微軟自家的C語言編譯器——簡稱為MSVC。不過當前MSVC無法支持最新的C11標準新特性,而且即便是C99標準也是支持得比較有限,所以它并不適合學習C11最新標準。但對于C語言初學者而言,這款集成開發環境還是非常適合的。幸運的是,2017年3月微軟最新推出的Visual Studio Community 2017包含了Clang編譯器前端工具,如果我們勾選安裝的話即可使用Clang來作為C語言編譯器。盡管Visual Studio下的Clang編譯器尚處于試驗階段,但大部分功能都可用了。目前筆者測試下來,它對原子操作還沒支持好,另外像UTF-8、UTF-16等字符編碼問題還與Windows操作系統本身相關,所以要涉及這些問題的話,我們只能使用系統特定的接口去解決或者使用下面提到的MinGW以及Clang官方提供的編譯工具鏈去解決。
所以,如果大家想在Windows操作系統下學習更為完整的C11標準最新特性,那么建議下載MinGW,如果是64位的Windows系統的話則最好下載Mingw-w64。如果還想學習Clang編譯器語法擴展的話,也可以再下載單獨的Clang編譯器。
3.1.1 安裝Visual Studio Community 2017
Visual Studio Community最新版本可在微軟的Visual Studio官方網站下載:
https://www.visualstudio.com/thank-you-downloading-visual-studio/? sku=Community&rel=15。
當我們下載好Visual Studio Community的安裝程序之后,將它打開運行。隨后會看到一個選擇安裝組件的對話框。我們在該對話框的右側能看到已經勾選上的組件以及一些沒有勾選上的組件。這里我們必須勾選上“Clang/C2(實驗)”這一項,如圖3-1所示。因為不安裝Clang,后面就無法用它編譯C源代碼。

圖3-1 Visual Studio Community安裝界面
安裝完成之后,我們打開Visual Studio Community 2017,首先出現歡迎界面。Visual Studio在首次啟動時就會很明顯地提示我們注冊賬號或用賬號登錄。我們先用Hotmail或MSN賬號登錄注冊,如果不注冊僅有30天左右的試用時間,但一旦注冊完之后就能永久使用了。我們登錄完自己的賬號之后就可以開始新建一個C語言的項目工程了。
我們找到菜單欄最左邊的“文件”,然后選擇“新建”,再點擊“項目”,如圖3-2所示。

圖3-2 歡迎界面中新建項目
隨后我們會看到新建項目的對話框。在左側邊欄中找到“Visual C++”,然后選中“Win32”,隨后在中間欄選擇“Win32 Console Application”,最后,在底下輸入此工程創建后存放的目錄路徑以及工程名,如圖3-3所示。

圖3-3 Visual Sutdio新建項目
點擊“OK”按鈕后進入應用設置向導界面,如圖3-4所示。

圖3-4 Visual Studio應用設置向導
我們看到圖3-4這個界面時,先別著急點擊“下一步”按鈕,應先點擊左邊邊欄中的“應用程序設置”,對此進行初步配置。然后進入圖3-5所示的界面。

圖3-5 Visual Studio項目創建時的應用設置
圖3-5所示的界面中,在“附加選項”中,先取消勾選“預編譯頭”,然后勾選“空項目”。最后,點擊“完成”按鈕進入到我們所創建的cdemo項目工程的主界面。此時,整個工程是空的,只有文件夾而沒有任何文件,需要手工新建C源文件。用鼠標右鍵單擊“源文件”,選擇“添加”,然后再點擊“新建項”,如圖3-6所示。

圖3-6 Visual Studio添加C源文件
在隨后彈出的如圖3-7所示的對話框中,選中中間欄中的“C++文件(.cpp)”那一項,然后在底下“名稱”一欄輸入源文件名。

圖3-7 Visual Studio命名C源文件名
注意:這里需要注意,默認文件后綴名是.cpp,即C++源文件,因為Visual C++默認采用C++編程語言,因此我們這里要手工填寫.c文件后綴名,使得后續我們用C編譯器進行編譯構建整個控制臺應用。
完成之后,我們點擊“添加”按鈕,然后再次進入工程主界面,此時即可看到C源文件的編輯界面了。
我們在進入源文件編輯界面后,先對Visual Studio的文本編輯選項做些處理,以便于我們后續可以流暢地編寫代碼。如圖3-8所示,我們在上面的菜單欄找到“工具”,然后選擇“選項”。

圖3-8 Visual Studio準備設置編輯選項
點擊進入后能看到如圖3-9所示的對話框。在左邊欄找到“文本編輯器”這個選項,然后將它展開,選中“所有語言”,隨后我們勾選上“行號”,這樣,在編輯每個文本文件時都能看到行號,便于我們查找代碼中的語法錯誤以及調試代碼用。

圖3-9 設置編輯選項
最后,再選中“制表符”選項,對制表符進行設置,如圖3-10所示。習慣上,我們一般將Tab Size設置為4個半角字符,縮進大小也是4個半角字符,然后每個制表符用4個空格代替,這樣用其他編輯器瀏覽Visual Studio編輯過的源文件也不會導致格式錯亂。

圖3-10 Visual Studio設置制表符
接下來我們設置當前的項目工程的屬性選項。我們找到菜單欄的“項目”,然后點擊“cdemo屬性”,如圖3-11所示。

圖3-11 Visual Studio設置項目屬性
在配置界面的常規頁面中(見圖3-12),先找到左上角的“配置”選項,選擇“所有配置”。這樣,我們后續做的所有配置都對Debug模式與Release模式同時有效。然后,在右側找到“平臺工具集”,這里需要選擇使用“Visual Studio 2017-Clang with Microsoft CodeGen”,這個選項使得我們對當前的項目工程使用Clang編譯工具鏈進行編譯構建。

圖3-12 Visual Studio對cdemo項目工程的常規設置
隨后我們展開C/C++這一項,此時仍然需要先將左上角的“配置”設置為“所有配置”。然后找到“語言”,將“C語言標準”設置為GNU11標準。這樣我們就能在Visual Studio Community集成開發環境下編寫調試大部分基于GNU11標準的C語言代碼了。設置如圖3-13所示。

圖3-13 Visual Studio設置C語言標準
全都設置完成之后,我們就可以編寫第一個C語言程序了。同一般C語言教程一樣,我們這里也通過輸出一個“Hello, world! ”字樣,作為第一個C語言代碼的演示程序。我們輸入圖3-14中所示的代碼,然后點擊工具欄中的綠色三角箭頭(圖3-14中用矩形框圈出)即可編譯運行了。在程序最后的getchar()作用在于:彈出的控制臺應用不會在程序終止時馬上自動關閉,而是等用戶輸入一個回車時再關閉。

圖3-14 在Windows控制臺輸出字符串
在圖3-14所示的界面中,橢圓圈出來的部分用于設置當前程序以調試模式構建還是以發布模式構建。如果以調試模式構建,我們可以利用Visual Studio內建的調試器做斷點跟蹤,查看局部對象與全局對象狀態以及寄存器狀態等,便于調試程序。如果以發布模式構建,那么當前程序會被大幅優化,使得程序運行性能大幅提升,但難以調試。圖3-14中,中間用矩形框圈出的部分是設置當前目標程序的執行模式,默認為x86,即32位執行模式。這里我們將它設置成了64位執行模式。
3.1.2 安裝MinGW編譯器
MinGW編譯器是著名開源C語言編譯器GCC對Windows操作系統的一個移植版本。通過MinGW,我們就可以在Windows下享用大部分GCC編譯器所帶來的強大功能了。這對跨平臺的C語言開發而言十分有用。下面我們就來介紹如何下載安裝MinGW編譯器。
首先,我們直接進入這個網址下載安裝文件:http://sourceforge.net/projects/mingw/files/latest/download?source=files。這個文件非常小,因為MinGW采用的是在線安裝模式,萃取線上各個最新release版本的組件進行下載。
然后,我們雙擊安裝包,初步安裝完畢后彈出對話框如圖3-15所示。綠色進度條表示已經安裝好了。

圖3-15 MinGW初步安裝成功
我們點擊“Continue”按鈕后,出現選擇安裝更多組件的對話框。我們在左側欄點擊“Basic”,即采用基本安裝。然后,在右側欄安裝上全部列出的組件。要選中某個安裝組件,鼠標右鍵該包名,然后在快捷菜單中選擇“Mark for Installation”命令,如圖3-16所示。

圖3-16 MinGW安裝,選中安裝包
全都選擇好之后,我們最后更新剛選好的安裝包。我們在菜單欄選中“Installation”,然后點擊“Update Catalogue”,如圖3-17所示。

圖3-17 MinGW更新安裝包
之后會彈出如圖3-18所示的界面,點擊最左邊的“Review Changes”按鈕,會彈出如圖3-19所示的對話框。

圖3-18 MinGW安裝要求確認

圖3-19 MinGW安裝更新
點擊“Apply”按鈕之后,就會下載安裝設置更新后的安裝包。等待全都安裝完畢后,點擊“Close”按鈕,退出整個安裝程序。
安裝結束后,不要著急使用,而是先將MinGW的bin文件夾注冊到環境變量中。先打開“文件資源管理器”,在左側欄中找到“此電腦”或“我的電腦”,鼠標右鍵單擊它,選擇“屬性”,進入后點擊左側的“高級系統設置”,如圖3-20所示。

圖3-20 進入環境變量的設置界面
進入圖3-20的對話框之后,點擊“環境變量”按鈕,進入到“環境變量”對話框。我們在“系統變量”區域選中“Path”變量,然后點擊“編輯”按鈕,彈出“編輯系統變量”對話框。在“變量值”中往后添加剛才安裝后的MinGW中的bin文件夾所在目錄。在環境變量中的每個值之間用半角分號“; ”進行分隔,如圖3-21所示。

圖3-21 進入環境變量設置Path
完成之后,我們就可以打開控制臺程序(方法是右鍵桌面上左下角“開始”按鈕,然后選擇命令提示符),然后進入要編譯的C源文件所在的目錄。然后用gcc命令對指定C源文件進行編譯構建,如圖3-22所示。
這里,我們借用之前在Visual Studio Community下編輯好的源文件test.c。我們先用cd命令定位到test.c所在的目錄。然后用gcc --version命令查看當前GCC編譯器的版本。最后,用gcc -std=gnu11 test.c進行編譯,最終在當前目錄生成a.exe可執行文件。我們直接鍵入a,回車,即可看到程序輸出結果。
要注意的是,MinGW是32位的C語言編譯器,所以它構建出來的程序也是32位的。如果各位用的Windows操作系統是64位的,那么可以使用Mingw-w64編譯器。下載地址如下:https://sourceforge.net/projects/mingw-w64/files/latest/download?source=files。
Mingw-w64的安裝、設置過程與32位的MinGW類似,這里不再贅述。
3.1.3 安裝LLVM Clang編譯器
LLVM(Low Level Virtual Machine)起源于一個大學項目,它是一個編譯器基礎架構項目,用于設計一組具有良好定義的、可重用的庫。LLVM起先用于替代GCC(這里的GCC是指GNU Compiler Collection)棧中的代碼生成器,然后對GCC中已有的許多編譯器進行修改以適配LLVM。后來LLVM發起了開發一個全新的適用于不少編程語言的編譯器前端,稱為Clang。Clang主要支持C、C++、Objective-C等編程語言,并且主要由Apple公司大力支持和維護。LLVM與Clang都基于BSD許可證,比GPL更寬松。正因如此,現在許多硬件商都逐漸開始投入對LLVM的支持,像Khronos開放標準組織也基于LLVM IR(Intermediate Representation)開發出了自己的一套SPIR-V。Clang編譯器在語法上力爭支持各大主流編譯器的語法擴展,包括GCC和MSVC,所以微軟也已經把Clang納入Visual Studio集成開發環境的工具集中。

圖3-22 用GCC構建C程序
我們首先在LLVM Clang官網下載最新穩定發布版本的Clang安裝包:http://llvm.org/releases/download.html。然后,要注意的是選擇32位版本,如圖3-23所示。

圖3-23 下載Clang for Windows (32-bit)
由于Clang主要是一個編譯器前端,因此它需要依賴其他編譯器的連接器以及某些運行時庫。所以,我們光安裝Clang是無法直接成功構建應用程序的,因而我們要使用Clang的話,必須在此之前先把MinGW安裝好。MinGW是32位的,因此為了二進制兼容,我們所選取的Clang也必須是32位的。當然,如果之前安裝的是64位的MingW-W64,那么這里需要下載安裝64位的Clang。
安裝Clang的過程非常簡單,可根據安裝向導簡單地做些選擇即可完成安裝。安裝完成后,可以去“系統”里的環境變量中看,把LLVM目錄下的bin文件夾的路徑添加到Path環境變量中,如圖3-24所示。然后就可以再次使用命令行工具直接編譯運行程序了。

圖3-24 用Clang編譯器構建應用程序
3.2 macOS系統下搭建C語言編程環境
macOS系統也不默認自帶C語言編譯器。然而,用戶可以自己去Mac App Store免費下載macOS下的強大開發工具——Xcode:https://itunes.apple.com/cn/app/xcode/id497799835? mt=12。該集成開發工具采用Apple定制版本的Clang編譯器,稱為Apple LLVM編譯器。它自帶C、C++、Objective-C以及Apple自己新推出的Swift編程語言編譯器,還有一系列功能強大的代碼靜態分析以及性能剖析工具。
下載完Xcode之后,把它打開。如果是第一次啟動,Xcode會自動更新一些資源,完了之后彈出主界面,如圖3-25所示。

圖3-25 Xcode歡迎界面
我們選擇第二個選項,點擊它即可創建應用程序工程。第一個選項僅用于操練把玩Swift編程語言,而第二個選項用于創建真正的應用或庫。當然,有些應用可直接提交到App Store審核,有些則不行。
點擊“Create a new Xcode project”之后,出現圖3-26所示的對話框。在圖3-26中,我們看到在上面一欄中所選的項目工程為macOS的應用。然后在下邊,我們選擇“Command Line Tool”,即命令行工具。最左邊的Cocoa Application用于創建macOS系統上基于GUI以及沙盒機制的應用,它可以上傳到Mac App Store。中間的“Game”專門用于游戲應用,也可上傳到Mac App Store。而最右邊的“Command Line Tool”構建出來的應用則無法上傳到Mac App Store,但是它能訪問macOS的整個文件系統,并且沒有采用沙盒機制。另外,開發者用Command Line Tool開發出來的應用也可以直接放到網上供其他人下載使用。

圖3-26 選擇MacOS命令行工具應用項目
我們點擊“Next”按鈕之后出現如圖3-27所示的對話框。在第1行用英文輸入自己的產品名稱,這個后面將用于自動生成的工程名稱。然后第2行填寫組織名。第3行填寫組織標識,格式為com.<公司名>.<產品名>。當然,第2、第3行對于我們的demo而言可以隨意填寫。第5行我們要選擇C,表示使用C語言。

圖3-27 輸入macOS命令行應用的屬性
點擊“Next”按鈕可看到圖3-28所示的目錄選擇對話框。

圖3-28 macOS命令行應用生成目錄選擇對話框
這里選擇將新創建的項目工程放到哪個目錄下。另外,這里要注意的是,我們不要勾選“Create Git repository”這一選項。因為它會在工程本地做git版本管理,對于我們一般應用而言沒有任何必要,而且這會隨著工程構建的次數增多而增大,很占磁盤空間。而且如果要將本地工程拷貝到其他環境,也會帶來許多不便。我們最后點擊“Create”按鈕之后,工程就會被創建好。
工程被創建完之后,Xcode默認會打開,包括會自動創建一個main.c的C語言源文件。此時,我們不用著急編輯、運行,可以先設置一下編譯選項。
我們首先點擊藍色的“CDemo”項目工程圖標,然后點擊中間一欄“TARGETS”下的“CDemo”控制臺圖標,最后在右邊欄的最上方選中“Build Settings”,然后在下面選中“All”和“Combined”。隨后,我們找到“Apple LLVM x.x-Language”這一欄,將“C Language Dialect”選為gnu11,這個選項將貫穿本書內容。到此,我們的C語言編譯選項就設定好了,如圖3-29所示。

圖3-29 macOS項目設置工程配置選項
如果我們想對最終生成的代碼再做一些優化,可以設置圖3-30中的一些選項。

圖3-30 macOS項目設置其他編譯選項
我們將C++的異常以及運行時類型(RTTI)全都關閉,另外也將Objective-C的異常關閉。這樣,最終的應用程序中將不會包含異常棧,同時,編譯器后端優化也能更省力不少。大家可以觀察到,將這幾個選項關閉后,最終生成的可執行文件會比開啟時要小一些。
最后,我們可以設置一下Xcode自身的偏好設置,將行號顯示出來,如圖3-31所示。

圖3-31 打開Xcode偏好設置
我們在菜單欄上,選擇“Xcode”,然后點擊“Pre-ferences...”,彈出圖3-32所示的對話框。我們把“Line numbers”勾選上即可在文本編輯框中看到行號。另外,Xcode默認字符編碼已經是UTF-8了,因此不需要我們做額外的設置。

圖3-32 Xcode設置文本編輯屬性
由于Xcode默認字體可能會顯得比較小,因此如果想設置字體以及背景顏色的話可以選擇“Fonts & Colors”選項。
在進入到此對話框后,我們點擊左側欄下邊的“+”號,添加一個新的字體,并且選擇“Duplicate‘Default'”,如圖3-33所示。這使得我們所新增的字體以默認字體和顏色作為基準,然后對它做大小修改。

圖3-33 Xcode字體設置,添加新字體
如圖3-34所示,我們這里新增了一個叫“Defualt_Big”的字體,然后在中間這欄,我們先選中“Plain Text”,然后將滾動條滾動到最下方,按住Shift鍵再選中最后一條“Other Preprocessor Macros”,這樣可以將所有種類的文字格式全都選中,隨后我們點擊“T”字樣的按鈕來調整這些文字格式的字體大小。這里,原先的字體大小為“Menlo Regular-11.0”,設置之后這里變為“Menlo Regular-14.0”。

圖3-34 Xcode設置新字體格式與大小
現在,我們就可以直接運行Xcode自動幫我們生成好的main.c中的C源代碼了。我們直接點擊右上角的三角箭頭按鈕即可編譯并運行這段代碼,如圖3-35所示。

圖3-35 編譯運行macOS控制臺應用
我們在下面的調試控制臺中能看到圖3-35這兩行文字。其中,最后一句是應用退出后系統自動打印的。我們可以看到,macOS下能非常輕松地直接輸出中文,而不需要各種復雜的編碼轉換。

圖3-36 macOS控制臺程序運行結果
3.3 本章小結
本章主要講述了Windows操作系統下如何使用Visual Studio Community、MinGW和LLVM Clang進行C語言程序開發,同時也講解了如何在macOS下使用Xcode做C語言程序開發。因為Windows操作系統與macOS系統用得比較廣泛,而且它們都主要基于GUI的集成開發環境進行編程,所以我們做重點講解。而在各個版本的Linux下基本都默認安裝了GCC編譯器,各位可以直接在Linux系統下的命令行終端使用gcc命令對C語言源文件做編譯構建。而當前FreeBSD最新發布版本默認使用了LLVM Clang編譯器,各位也可以直接在命令行終端使用clang命令對C語言源文件做編譯構建。
另外,Linux、FreeBSD系統下,筆者推薦使用的集成開發環境是Eclipse。它擁有比較基本的代碼智能感知,設置斷點進行調試的功能,而且它也是一款開源免費的軟件。當然,要啟動Eclipse必須先下載JRE(Java Runtime Environment),這個可以從Oracle官網下載。
截至本章,第一部分的講解結束,各位讀者應該對C語言的由來、用途以及各種準備工作都了解得差不多了吧?下面我們將進入第二部分,正式開啟C語言魔法的大門!
- JavaScript前端開發模塊化教程
- Python自動化運維快速入門
- 云原生Spring實戰
- Python Data Analysis(Second Edition)
- Apache Mesos Essentials
- Haxe Game Development Essentials
- PHP 7+MySQL 8動態網站開發從入門到精通(視頻教學版)
- Learning Unity 2D Game Development by Example
- C語言程序設計
- Android Wear Projects
- Mastering React
- Modern C++ Programming Cookbook
- 代碼閱讀
- C++17 By Example
- Getting Started with Windows Server Security