C學習-第一個C語言(一)

學習C語言語法的目的:就是可以利用C語言編寫程序,而後運行程序跟硬件(計算機、手機等硬件設備)進行交互。因爲咱們的最終目的是學習iOS開發,學習iOS開發的話必須在Mac系統下,所以我就在Mac系統環境下開發C語言程序,而不是在Windows環境下。編程

1、編寫第一個C語言程序-Hello World

1.用什麼工具寫代碼

首先咱們要作的確定是寫代碼,在代碼裏面說清楚想要計算機作出怎樣的操做。其實寫代碼就像平時寫文章同樣,只是在電腦上寫一些文本內容,那用什麼工具來寫代碼麼?平時咱們在Windows中寫文章,能夠用記事本、Word等文本編輯工具。在Mac中呢,咱們能夠安裝一些文本編輯工具來寫代碼,好比Sublime,Xcode,這裏咱們先用Sublime來寫一個簡單的程序,進行編譯,連接,執行,進行一個完整運行流程的演示,或者之後用 Xcode 進行快捷開發學習。小程序

clipboard.png

2.寫代碼

1> C程序由函數構成app

寫代碼以前,你首先要知道:任何一個C語言程序都是由一個或者多個程序段(小程序)構成的,每一個程序段都有本身的功能,咱們通常稱這些程序段爲「函數」。因此,你能夠說C語言程序是由函數構成的。編程語言

好比你用C語言編寫了一個MP3播放器程序,那麼它的程序結構以下圖所示:模塊化

clipboard.png

從上圖能夠看出:函數就是用來實現某個功能的程序段,每個函數都有本身的功能。所以,你應該把實現某個功能所需的代碼都寫在函數中。好比,有個函數的功能是播放MP3,那麼播放MP3的代碼都應該寫到這個函數中。
當調用(執行)一個函數時,計算機就會按順序執行函數中的全部代碼,從而展現函數所實現的功能。
通常來講,咱們會將不一樣的功能交給不一樣的函數去實現。好比,將暫停播放MP3的代碼寫到一個函數中,將中止播放MP3的代碼寫到另外一個函數中。所以,一個C程序中可能會有不少的函數。函數

2> C程序的入口工具

前面說到:一個C程序中可能會有不少的函數,這樣就會有個疑問:當咱們運行整個程序時,在衆多函數中,計算機會先執行哪一個函數呢?也就是說,一個C程序的入口在哪裏?我寫了幾千行的代碼,應該先從哪一行代碼開始執行啊?是從第一行代碼仍是從最後一行代碼開始執行啊?學習

其實,C程序的入口是一個名字叫作main的函數,簡稱main函數。(爲了區分函數,每個函數都有一個名稱)也就是說,無論整個程序中有多少個函數,都是先執行main函數。無論main函數寫在文件中間,仍是文件末尾,也都是先執行main函數。spa

須要注意的是:命令行

若是一個C程序中沒有main函數,那麼這個程序就不具有運行的能力。連程序的入口都沒有,還運行什麼?
一個C程序中只能有一個main函數。想象一下也知道,若是有多個main函數,究竟先執行哪個main函數呢?這會讓計算機沒法選擇

3> 編寫main函數

如今已經知道,要想運行一個C程序,必須有一個main函數,接下來就在文本編輯工具中編寫一個main函數。main函數的格式大體以下:

int main()
{
   return 0;
}

第1行的int暫時不用去理解,先認爲是main函數的固定寫法
第1行的main是函數名稱,main後面的一對小括號()是函數的標誌,絕對不能缺乏!並且這對小括號是「英文括號()」,不是「中文括號()」!
第2行開始,有一對大括號{},函數內部的代碼都要寫到這對大括號裏面。每個函數都有一對{},{}裏面的內容能夠稱爲「函數體」。
在第3行添加了一行return 0;,暫時不用理解它的意思,先認爲是main函數的固定寫法。
像第3行這種寫在函數中的代碼能夠稱爲一條「語句」。寫完一條語句後,要在尾部加上一個分號「;」,表明語句結束了

4> 編寫輸出語句

接下來在main函數中添加代碼。

#include <stdio.h>

int main()  
{  
    printf("Hello World\n");
    return 0;
}
  • 在第5行添加了一條語句printf("Hello Worldn");,這條語句的做用是讓計算機在屏幕上輸出用雙引號""括住的內容:Hello World,後面的"n"是一個轉義字符,表示回車換行,所以,輸出Hello Wrold這一串內容後會自動換行。至於爲何這條語句要這樣寫?爲何這條語句能讓計算機輸出東西?這些疑問都先擱着,之後會詳細解釋。

  • 爲了保證第5行代碼的正常使用,就在main函數的前面加了一行代碼#include <stdio.h>,暫時不用去深入瞭解它的意思,默默加上便可,注意,這裏是不用加上分號";"的

  • 當運行這個程序,就會先執行main函數,接着就會按順序執行main函數大括號{}中的全部語句(第5行、第6行語句)

  • 須要注意的是:main函數中全部語句都必須寫在第6行return 0;語句的前面,先別問爲何,之後會詳細介紹

3.保存爲C程序的源文件

代碼寫完了,總得保存起來吧,保存爲何格式的文件呢?每一個文件都有本身的拓展名,不一樣的拓展名就表明着不一樣類型的文件,好比.mp3表明着音頻文件,.txt表明着文本文件。咱們前面編寫的C語言代碼,應該保存爲一個拓展名爲.c的文件,這個.c文件稱爲C語言程序的「源代碼文件」,也稱爲「源文件」。

按下快捷鍵 command + s,輸入文件名(我這裏叫作one.c),選擇文件格式爲c便可。

好吧,目前爲止,咱們的第一個C程序就算寫完了。

2、編譯程序

前面已經把程序寫好了,火燒眉毛想作的事情確定是運行程序,看看計算機會有什麼反應。遺憾的是,前面編寫好的 one.c 文件還不可以運行。計算機只能識別0和1組成的機器指令,你如今寫的這些什麼int、main這些英文,它是看不懂的。咱們須要使用C語言編譯器,將源文件翻譯成只有0和1的二進制文件,這個翻譯過程,咱們稱之爲「編譯」。

Mac系統上支持一款叫作gcc的編譯器,gcc支持多種編程語言:C語言、C++、Objective-C、Java等。在後來,蘋果公司本身開發了一款叫作clang的編譯器,目標就是要超越gcc。咱們這裏就採用clang編譯器來編譯程序。要想在Mac中使用clang編譯器,首先要安裝一個命令行工具(Command Line Tools)

1.下載安裝命令行工具

安裝命令行工具的方式有2種。

1> 方式一:直接到蘋果官網下載

先點擊屏幕左上角的「蘋果圖標」,查看你的Mac系統版本

clipboard.png

個人版本是 10.11.6,因此,我選擇下載10.11版本的
Command_Line_Tools_macOS_10.11_for_Xcode_8.2.dmg

2> 方式二:先到蘋果官網下載安裝Xcode,而後打開Xcode,咱們能夠看到Xcode8.1版本已經自帶了編譯器工具,因此,不須要咱們再次安裝了。

2.打開終端

安裝完命令行工具後,就可使用clang編譯器了。那怎麼使用clang呢?經過在「終端」中輸入相應的clang指令來啓動編譯器。
先進入咱們的項目目錄one.c路徑:

➜  ~ cd /Volumes/MacSysterm/workspace/C/demo

4.輸入編譯指令,編譯one.c文件

輸入指令:cc -c one.c , 而後敲回車

指令 cc -c 表示編譯某個源文件,後面跟上源文件的名稱或者全路徑。

clipboard.png

若是敲完編譯指令後,沒有顯示太多的信息,說明你編譯成功了。編譯成功後,會在終端所在的路徑下生成一個二進制文件,稱爲「目標文件」,拓展名爲".o",文件名與源文件一致。one.c文件編譯成功後就生成了one.o文件。

補充:在開發過程當中,不可能將全部的代碼都寫在一個.c文件中,爲了模塊化開發,通常會將不一樣的功能寫到不一樣的源文件中。若是要同時編譯多個源文件,這樣寫:cc -c one.c two.c three.c。源文件編譯以後,每一個源文件都會生成對應的.o文件,好比two.c生成了two.o、three.c生成了three.o

5.編譯器的語法檢測

編譯器除了能將.c源文件編譯成.o目標文件以外,還有一個很是重要的功能:語法檢測。跟英語同樣,C語言也有本身的語法,若是你不按照C語言語法去寫代碼,那就沒法編譯成功。生成目標文件以前,編譯器會先檢查.c文件是否有語法錯誤,若是出現語法錯誤,會列出錯誤的總個數、錯誤緣由和錯誤代碼的行號,這時候就不會產生目標文件;必須修正相應的語法錯誤,從新編譯成功後,纔會生成目標文件。

接下來我把代碼故意寫錯,第3行把int寫成了intt,第5行語句少了一個分號";"

3、連接程序

1.什麼是連接

源文件編譯成功後,會生成一個.o目標文件,這就是一個二進制文件,可是,仍是不能運行。目標文件不能運行的主要緣由有2個:

1> 在開發過程當中,不可能將全部的代碼都寫在一個.c文件中,爲了模塊化開發,通常會將不一樣的功能寫到不一樣的源文件中。源文件編譯以後,每一個源文件都有對應的.o文件,好比two.c生成了two.o、three.c生成了three.o,這些.o文件都不能單獨運行,它們之間都有密不可分的關係,須要將全部相關聯的.o目標文件組合在一塊兒。

2> 除開組合全部的目標文件以後,還須要將C語言的函數庫包含進來,才能生成可執行文件。

將全部相關聯的.o目標文件、以及C語言函數庫組合在一塊兒生成可執行文件的過程,咱們稱爲「連接」。

2.連接目標文件

在終端中輸入指令:cc one.o , 而後敲回車。若是要同時連接多個目標文件,這樣寫:cc one.o two.o three.o

連接成功後,會生成一個可執行文件,默認的名稱叫作「a.out」。因爲咱們是在mac系統下生成了可執行文件,mac系統是基於UNIX系統的,因此這個文件只能在UNIX系統中運行。若是是在Windows環境下,生成的可執行文件拓展名爲".exe"。

3.更改可執行文件的名稱

若是想更改可執行文件的名稱,能夠輸入指令:cc -o one one.o,-o後面跟上可執行文件的名稱,所以可執行文件的名稱就變成了one

4.連續執行編譯、連接

其實也能夠在終端中直接輸入:cc one.c , 會按順序執行編譯、連接兩個操做。

這條命令產生一個名爲"a.out"的可執行程序。中間會產生一個名爲one.o的目標文件,但它在連接完成後會被刪除。

若是想修改可執行文件的名稱,跟前面是同樣的,指令爲:cc -o abc one.c , 可執行文件的名稱爲abc

4、運行程序

通過前面幾個步驟後,終於生成了可執行文件,接下來就能夠運行這個程序了。運行程序有2種方式:

1.在終端中輸入指令運行程序

在終端中輸入:./a.out,敲回車就能夠運行這個程序。這裏a.out是可執行文件的名稱。

敲完指令後,你會發現屏幕上輸出了一句「Hello World」。就這樣,咱們成功跟計算機來了一點小小的互動,它替咱們輸出了一句文字。

2.雙擊可執行文件

直接雙擊a.out文件,選擇用終端來運行程序

5、總結

通過一番折騰,終於將第一個C程序運行成功了,總共有4個步驟:編寫程序 -> 編譯 -> 連接 -> 運行

clipboard.png

須要注意的是:

  • 中間某個環節出錯了,那麼就不會有後面的操做。好比編譯出錯了,那麼就不可能有連接這個環節。

  • 若是你對源代碼進行了修改,那麼須要從新編譯、連接以後再運行程序,這樣才能看到最新的效果。

6、使用Xcode開發C語言步驟

1.選擇建立C項目

clipboard.png

選擇 Create A new Project

選擇項目名稱,而後選擇 C 語言

clipboard.png

2.選擇Command Line Tool

選擇 MacOS -》 Command Line Tool

clipboard.png

3.編寫程序

clipboard.png

而後直接運行 run 便可編譯C程序

7、指令彙總

這些指令不用去死記,大體有個瞭解,用到時再來查資料便可

1.編譯單個c源文件,併產生一個目標文件

cc -c one.c

這條命令產生一個名爲one.o的目標文件

2.編譯多個c源文件,併爲每一個文件產生一個目標文件

cc -c one.c two.c three.c

這條命令產生3個目標文件:one.o、two.o、three.o

3.連接單個目標文件

cc one.o

這條命令產生一個名爲a.out的可執行文件

4.連接多個目標文件

cc one.o two.o three.o

這條命令產生一個名爲a.out的可執行文件

5.編譯並連接一個c源文件

cc one.c

這條命令產生一個名爲a.out的可執行文件。中間會產生一個名爲one.o的目標文件,但它在連接過程完成後會被刪除。

6.編譯並連接多個c源文件

cc one.c two.c three.c

這條命令產生一個名爲a.out的可執行文件。當編譯的源文件超過一個時,目標文件便不會被刪除。這就容許你對程序進行修改後,只對那些進行過改動的源文件進行從新編譯。

7.編譯一個c源文件,並把它和現存的目標文件連接在一塊兒

cc one.o two.o three.c

這條命令產生一個名爲a.out的可執行文件

8.上面那些能夠產生可執行文件的指令都可以加上「-o name」這個選項,產生的可執行文件就叫作name

好比 cc -o abc one.c
這條指令會產生一個名爲abc的可執行文件

9.執行可執行文件

./a.out

這條指令能夠執行一個名爲a.out的可執行文件

相關文章
相關標籤/搜索