本文是寫給Mac電腦開發新手的入門帖,諸神請退散。
C語言
C語言可說是電腦環境中的“鎮國神器”,從發明至今,雖然C語言的使用者緩慢的減少,但從當前市場應用情況看,尚無一台電腦能夠擺脫C語言的支撐而生存。
此外由於大多數主流操作系統都主要使用C語言編寫,使得C語言跟操作系統結合最為緊密,從而更容易對整體電腦深入了解。所以對電腦相關類專業的學生,C語言仍然是必修課。
最后就是近幾年,隨着物聯網、嵌入式開發的進展,效率最高、資源需求最少的C語言,又成為了很多項目的不二選擇。
Mac電腦作為類Unix類操作系統的代表,C語言也是天生具備的。很多Mac電腦即便不用於軟件開發,也會因為各種免費開源軟件的使用,在依賴包中自動安裝了gcc的支持,從而具備了C語言的開發環境。
安裝開發環境
在Mac電腦上進行C語言開發有兩種方式,一是使用圖形界面(GUI)進行開發,這種情況使用蘋果自主開發的Xcode開發工具。二是使用純命令行的開發工具gcc或者clang配合vim編輯器。前者適合大規模項目的開發,后者簡潔高效,相對來說適合開發小規模的程序或者應急的修修補補。
安裝Xcode唯一合法的方法是在Mac電腦打開App Store程序,在右上角搜索框中輸入"Xcode",從搜索到的結果中一般前1、2位就是Xcode,然后點選“獲取”或者“安裝”。Xcode容量比較大,一般安裝包都在4.5G-6G之間,依據網絡的情況,需要等待不短的時間。安裝完成后,第一次運行Xcode會提示安裝命令行工具,按照提示就會自動安裝clang命令行開發工具。命令行開發包一般是100多M,下載安裝都會比較快。
概念和選擇
上一節說到了Xcode是一個圖形界面的開發環境,習慣上也叫做集成開發環境(IDE)。因為建立工程、編輯輸入代碼、編譯、測試甚至打包和發布,都在這個統一的圖形界面中,大多功能都是動動鼠標就能完成,所以比較適合初學者。
在Windows電腦上對應的工具是微軟Visual Studio系列,事實上在Windows上幾乎99%的程序員都只工作在集成開發環境下,大多數人幾乎都已經沒有能力在命令行下工作了,這種退化害了很多人。
Mac的命令行C語言開發工具主要有兩種,clang及gcc,前者是蘋果官方推薦的,Xcode也使用Clang進行編譯。后者則是GNU開源社區推薦的,並且被大多數linux支持。兩者在語法的兼容性上幾乎沒有差別,用了幾年也只碰到1、2次很小的不同。而Clang在於錯誤信息、編譯速度等方面有很多優勢。所以我也建議就用Clang吧,如上所述,安裝Xcode,隨后安裝命令行工具包,所需的這些工具就都有了。在一台電腦中很可能剛才說的Xcode/Clang/Gcc同時都安裝了,放心,他們互相不會打架的。
在命令行狀態下,為了完成編程工作,實際上還需要文本編輯軟件和工程管理軟件,后者可以用以前文章提過的Makefile系統。另外初學者代碼量都不會多,一般1、2個文件了不起了,可以先忽略工程方面的問題。文本編輯推薦使用Mac已經內置的vim編輯程序。在社區中還有很高呼聲的emacs,但一是考慮初學者上手;二是考慮當前年代C語言的主要用途方向;三則純屬個人偏好,我推薦使用vim。實際上,只要你掌握了這種編程的方式,使用第三方提供的圖形化編輯器也是完全可以的,比如常見的UltraEdit/TextMate,都是很優秀的編輯軟件。但前提一定是vim你已經真正掌握,牢記於心了,這種看起來不起眼的小能力,將來會大大的擴展你的工作適應空間。
額外補充一句,雖然上一節我說了Xcode這樣的集成環境適合大的項目,命令行適合小的項目或者修修補補,但事實上在開源社區中,命令行所產生的代碼量仍然是最高的,幾乎你知道的真正大規模系統都是以命令行為主要方式開發出來的,這里只提一個,比如Linux操作系統本身。所以歸根結底,工具就是工具,最終還是靠人的能力。
vim簡要入門
vim是命令行下重要的文本編輯工具。命令行也就是“終端”app,啟動命令行的方式除了在Launchpad中翻找圖標之外,也可以在電腦右上角選擇放大鏡“spotlight”,或者使用SpotLight的快捷鍵:COMMAND+空格,然后在其中搜索Terminal,搜索到了之后用鼠標點擊運行就可以進入命令行。
(終端.app,也叫Terminal.app、命令行,圖標長這樣子)
至少在macOS10.10以后,系統中已經內置了vim工具。如果你的系統沒有vim軟件,可以使用命令brew install vim
來安裝,brew是包管理器,用於管理Mac電腦上的開源軟件。brew的安裝可以查看以前的文章。
運行vim的方法是在命令行狀態鍵入命令vim 要編輯的文本文件名
。
這里插一條命令行操作的知識,當前正在輸入的命令行,ctrl-a是將光標移動到當前行頭一個字符;ctrl-e是將光標移動到當前行最后一個字符,移動光標是為了在輸入命令的時候編輯輸入錯誤的部分。補充在這里,是為了你可以跟下面vim的操作對應區別着記憶。
vim默認不支持鼠標,具有3種工作狀態,分別是“光標狀態”、“輸入狀態”、“命令狀態”。剛剛進入vim的時候就是在光標狀態,這個狀態下有以下幾種常見操作:
-
i 向上移動光標
-
j 向左移動光標
-
k 向下移動光標
-
l 向右移動光標
-
Mac電腦,上下左右光標鍵可以起到跟上面ikjl字母鍵一樣的作用,但字母鍵操作更快。此外有一些電腦,光標鍵是不起作用的。
-
ctrl+f 向后翻頁
-
ctrl+b 向前翻頁
-
$ 移動光標到當前行最后一個字符
-
0 移動光標到當前行第一個字符
-
gg 光標移動到第一行
-
G 光標移動到最后一行
-
i 從當前光標位置字符之前開始插入文本,vim進入“輸入狀態”
-
a 從當前光標位置字符之后開始追加文本,vim進入“輸入狀態”
-
o 從當前行之后開始追加一行文本,vim進入“輸入狀態”
-
vim在“輸入狀態”可以輸入字符、回車換行、回格刪除前一個字符(包括回車換行符)
-
ESC 鍵結束輸入,回到“光標狀態”
-
yy 拷貝光標所在當前行到緩沖區(相當於剪貼板,但與通常電腦的剪貼板不是一個,不能互相粘貼)
-
p 把緩沖區內容插入粘貼到當前光標行之后的一行
-
x 刪除光標所在的一個字符
-
dd 刪除光標所在的一行
-
:光標移動到屏幕最下面一行,並進入“命令狀態”。
-
ESC鍵結束“命令狀態”,返回“光標狀態”,這跟從“輸入狀態”返回“光標狀態”一樣。
下面講述命令狀態的幾個操作:
- w 將文件存盤
- q 退出vim,回到命令行。如果文件被改變了,但沒有存盤,會有警告信息,使用q!可以忽略警告信息直接退出。
- x 存盤並且退出
- 0 光標跳到第一行
- nn nn代表一個數字,表示跳到第nn行
- $ 跳到文件最后一行,注意0和$跟“光標狀態”移動光標到行首和行末的操作很相似,再注意“光標模式”下也有移動光標到第一行、最后一行的方法,可以對照記憶
好了,掌握這些,你就可以編輯c語言的程序了。這部分學習的技巧是先記住必須、常用的,其它的可以打印出來當做速記卡放在顯示器旁邊,邊用邊記,一般強化記憶1、2天就能差不多了。
vim是從80年代的vi編輯器基礎和發展過來的,歷史已經比很多新入行的學習者年齡都大。經過這么多年的發展,已經有了很多擴展功能和定制功能,如果你用起來感覺還不錯的話,建議在網上搜索一些更詳細的教程,深入的了解一下。
使用vim開始我們的C語言之旅的第一個程序
習慣上人們都把第一個程序稱為“Hello World”,原因就是,這第一個程序,一般只打印一行“Hello World”到屏幕上。
- 在命令行,首先建立一個工作目錄,我們所有的程序、正式文件、臨時文件、結果文件,都保存在這里目錄中,這是保持電腦整潔的一個習慣。命令行建目錄的命令是:
mkdir cfiles
,這樣就在當前目錄下,建立了一個cfiles目錄。一般命令行剛打開的時候會是在用戶的主目錄,主目錄在Mac/Linux系統中也縮寫為~
符號,那cfiles目錄完整的寫下來也就是~/cfiles
,中間的除法符號/
是多個目錄名稱之間的間隔符。 - 進入我們的工作目錄,在命令行敲入:
cd cfiles
,這樣以后的操作,默認就是在~/cfiles目錄工作了。 - 快捷鍵COMMAND+C拷貝下面的程序到剪貼板。
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
這篇不是C語言的編程文章,因此不解釋程序本身的含義,有很多C語言的編程書可以用了。我們只繼續說我們下面怎么做。
4. 命令行敲入vim helloworld.c
,這是使用vim編輯一個名為helloworld.c的文本文件,這個文件現在還不存在,所以我們是新建這樣一個文件。
5. 在vim中,敲i鍵進入插入狀態,隨后COMMAND+V把剪貼板中的代碼粘貼出去。剛才講vim的時候說了,yy也是拷貝的意思,但是vim的剪貼板,跟Mac操作系統的剪貼板不是一個,所以vim的yy跟vim的p是對應的。Mac的COMMAND+C跟COMMAND+V是對應的,互相之間不能拷貝粘貼。
6. 按ESC鍵從“輸入狀態”返回到“光標狀態”,然后按:
再切換到“命令狀態”,隨后按x
保存文件,並退出vim。helloworld.c會保存在當前文件夾,也就是~/cfiles文件夾,這就是當前文件夾的作用。
7. 在命令行輸入gcc -o helloworld helloworld.c
,這條命令就是編譯helloworld.c程序,編譯完成,輸出為當前文件helloworld文件。正常情況下,編譯會很快結束,並且沒有錯誤信息。此外這里使用gcc進行了c語言程序的編譯,但並不一定真的是gcc系統,在Mac電腦上默認是使用clang系統,只是為了兼容也偽裝成了gcc的調用方式而已。這些知道就成,程序員沒有必要過多了解,這些編譯器互相都是兼容的。
8. 命令行輸入./helloworld
回車執行,屏幕上會出現一行“Hello World!”,這表示我們編輯一個C程序,然后編譯、並且運行驗證成功了。
以上就是在命令行編輯程序文件,編譯並運行所需知道的所有知識。接下來就是你按照C語言課本的要求進行你的各項編程實驗了。
PS:截止以上,利用命令行編輯、編譯C語言的方法,在Linux電腦上,也幾乎完全一樣。可能就是拷貝、粘貼在Linux系統是Ctrl-C及Ctrl-V,如果是遠程終端,則依賴終端所在客戶端的操作系統操作方法。vim操作、gcc命令是完全相同的。
Xcode
跟運行“命令行”一樣,Xcode也可以翻找圖標運行,或者使用SpotLight搜索一下再執行。Xcode程序的圖標就是題頭圖的樣子,當然----沒那么大。
Xcode除了剛才說過的第一次運行會自動提示你安裝命令行工具包,還需要設置一下蘋果的開發者賬號,其實就是AppleID。為蘋果電腦開發並需要正式發布產品的人,都需要向蘋果申請開發者賬號,這個賬號是收費的,IOS開發是99美金。不發布產品,僅僅是在自己電腦上學習、編程、測試,普通的AppleID應當會自動有一個user角色的PersonalTeam方式,不需要付費。想想Windows電腦上Visual Studio的高價格,這個還是很實惠的。Xcode設置開發者賬號的菜單是:Xcode菜單->Preferences,出來的窗口從左數第二個表單Accounts,在這里設置具有開發者身份的AppleID。
在這個鏈接http://finance.591hx.com/article/2015-12-25/0000518556s.shtml有個圖文的說明講解設置開發者賬號,可以參考。下面繼續我們的C語言之旅:
- 剛進入Xcode就有一個啟動界面,從左側第二行選擇“Create a new Xcode project”,在下一個出現的對話框中,選擇程序類型。Xcode可以開發iOS/watchOS/tvOS/macOS/Cross-platform五種應用,這里選擇macOS,表示是運行在桌面電腦上面的應用程序。第二行選擇“Command Line Tool”表示是命令行工具程序,接着選Next。
- 接着輸入應用的名字,我們剛才在命令行狀態起的名字是helloworld,這次可以叫firstc,隨你喜好。第二行是你的開發組織,因為使用的AppleID沒有開發者身份,所以就使用默認的Personal Team就可以了,如果使用了正式的開發者賬號,要選擇正確的組織信息。第三行是組織名稱,第二行的組織信息實際是電腦簽名用的證書名稱,用於保證編譯的程序正裝原造,除了你沒有被人篡改過。這一行則是用於軟件給用戶看的信息,就是一行可以辨識的字符,如果你有公司名可以輸入進去,沒有的話,隨便看你高興起一個吧。第四行是組織的標志名,用於確定全球本組織的唯一性,習慣上使用網址的逆向方式,沒有網址的話,看你喜歡吧,起一個唯一性的標志就好了。最后一行是重點,既然學習的是C語言,就選C。
- 接下來為這個項目選擇一個保存在磁盤上的位置,項目本身會自動建立一個文件夾,全部文件保存在項目自己的文件夾之內,這里選擇的實際上是項目文件夾上一層文件夾的位置。
- 到了這一步,實際上項目已經建立成功了。這個界面就是對項目整體進行修改、調整的界面,一般情況下選擇默認值就好。
- 我們可以在Finder中檢視一下項目建立的情況,可以看到文件夾的層次結構,還有那個自動建立的程序主文件main.c。
- main.c的內容,實際上已經是一個hello World,直接用鼠標點擊左上角的三角鍵,Xcode會自動對項目進行編譯、查錯、並運行。屏幕中部右下角的位置,就是程序運行輸出的結果。除了我們剛才知道的“Hello,World!”這一行,還有一行“Program ended with exit code 0”,直譯的意思是程序已經執行結束,退出代碼是0。0是一個特殊的退出代碼,表示程序正常退出。通常我們可以使用退出代碼表示某種錯誤,或者給本程序的調用者傳達某種約定的信息。
至此,使用命令行界面,和使用Xcode圖形化界面,我們都知道了如何開始我們的C程序。下面的歲月里,捧着教科書,努力吧!
參考資料:
xcode開發參考:https://www.jianshu.com/p/feadeb1ae7ae