【C語言】03-第一個C程式碼分析

來源:互聯網
上載者:User

說明:這個C語言專題,是學習iOS開發的前奏。也為了讓有物件導向語言開發經驗的程式員,能夠快速上手C語言。如果你還沒有編程經驗,或者對C語言、iOS開發不感興趣,請忽略

在上一篇中我們已經建立了一個C程式,接下來分析一下裡面的代碼。

項目結構如下:

一、程式碼分析

開啟項目中的main.c檔案(C程式的源檔案拓展名為.c),可以發現它是第一個C程式中的唯一一個源檔案,代碼如下:

1 #include <stdio.h>2 3 int main(int argc, const char * argv[])4 {5 6     // insert code here...7     printf("Hello, World!\n");8     return 0;9 }
1.#include <stdio.h>
  • #include 是C語言的預先處理指令之一,所謂預先處理,就是在編譯之前做的處理,預先處理指令一般以 # 開頭
  • #include 指令後面會跟著一個檔案名稱,前置處理器發現 #include 指令後,就會根據檔案名稱去尋找檔案,並把這個檔案的內容包含到當前檔案中。被包含檔案中的文本將替換源檔案中的 #include 指令,就像你把被包含檔案中的全部內容拷貝到這個 #include 指令所在的位置一樣
  • 如果被包含的檔案拓展名為.h,我們稱之為"標頭檔"(Header File),標頭檔可以用來聲明函數("函數"就是物件導向中的"方法"),要想使用這些函數,就必須先用 #include 指令包含函數所在的標頭檔
  • #include 指令不僅僅限於.h標頭檔,可以包含任何編譯器能識別的C/C++代碼檔案,包括.c,.hpp,.cpp等,甚至.txt,.abc等等都可以

也就是說你完全可以將第3行到第9行的代碼放到其他檔案中,然後用 #include 指令包含進來,比如:

1> 將第3行到第9行的代碼放到my.txt中

2> 在main.c源檔案中包含my.txt檔案

程式還是可以照常啟動並執行,因為 #include 的功能就是將檔案內容完全拷貝到 #include 指令所在的位置

  • 不過你可能會疑惑,為什麼stdio.h用角括弧<>,而my.txt用雙引號"" ?這個很好區別,如果是系統內建的檔案,最好用<>;如果是開發人員自己建立的檔案,最好用""

 說明:這裡用txt檔案純屬示範,平時做項目不會這樣做,除非吃飽了撐著,才會把代碼都寫到txt中去

 

2.main函數
  • 前面也已經提到,C中的函數就是物件導向中的"方法"。C語言是一門面向過程的語言,是以過程為中心的編程思想,就是先分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用函數就可以了
  • 一個C程式中一定會有一個main函數,也只能有一個main函數。main函數是整個C程式的入口。main.c的第3行代碼就定義了一個main函數。
  • main函數的傳回值為int類型,接收2個參數,其實可以不寫參數

main函數可以簡化成這樣:

main(){    // insert code here...    printf("Hello, World!\n");
return 0;}

這裡要注意的是:這裡的main函數沒有寫傳回值類型,並不代表函數沒有傳回值,而是表示傳回值類型為int類型,void才代表函數沒有傳回值

由於C語言的文法限制不嚴格,我們還可以進一步簡化main函數:

main(){    // insert code here...    printf("Hello, World!\n");}

雖然它要求main函數返回int類型的值,但我們可以不返回

 

3.stdio.h
  • stdio.h 是C語言函數庫中的一個標頭檔,裡面定義了一些標準輸入輸出函數。在main.c的第1行代碼中,用#include指令包含了stdio.h檔案。
  • 這裡之所以包含 stdio.h 檔案,是因為在第7行中用到了在 stdio.h 內部聲明的printf函數,這個函數可以向標準輸出裝置(比如顯示器螢幕)輸出資料,螢幕上輸出的文字就是第7行代碼printf("Hello, World!\n");造成的,雙引號""內的文本為C語言的字串

 

二、開發和運行C程式的步驟

步驟圖如下:

1.編寫程式

C語言源檔案的副檔名為".c",源檔案以ASCII碼形式儲存,不能直接被電腦執行,因為電腦只能識別二進位指令,也就是0和1

2.編譯(VC環境下)
  • 把C的來源程式翻譯成電腦可以識別的二進位形式的目標代碼檔案,這個過程稱為編譯,由C的編譯器完成
  • 在編譯的同時,還對來源程式的文法等進行檢查。若出現語法錯誤,則編譯失敗。如果編譯成功則產生目標檔案,目標檔案名跟來源程式檔案名稱一樣,副檔名為".obj"。比如,mj.c編譯後產生目標檔案mj.obj
  • 每個源檔案是單獨進行編譯的,假如一個項目中有多個.c源檔案,編譯成功會產生多個對應的.obj目標。一般情況下,目標檔案之間是有關聯的,比如 a.obj 可能會調用 b.obj 中定義的一個函數,因此它們都不能夠單獨被電腦執行,而且目標檔案中並不包含程式運行所需要的庫函數等
3.連結(VC環境下)
  • 將所有有關聯的obj目標檔案,以及系統提供的C庫函數等組合在一起產生可執行檔的過程,稱為"連結"
  • 連結產生的可執行檔的檔案名稱跟來源程式檔案同名,副檔名為".exe",電腦可以直接執行
4.運行

* 如果是在Windows環境下,直接雙擊".exe"檔案即可運行C語言程式

* 由於我們的第一個C程式,是在Mac OS X系統內容下用Xcode建立的命令列項目,Mac OS X系統是基於UNIX系統的,因此產生的可執行檔的這樣的:

 

* 雙擊可以用終端(命令列)開啟:

 

三、總結

說了這麼多,總結一下第一個C程式的運行步驟:

1.在編譯前先執行#include指令,拷貝stdio.h的內容到來源程式中

2.編譯來源程式,產生目標檔案

3.連結C語言函數庫,產生可執行檔

4.運行可執行檔,在螢幕上輸出"Hello, World!"

看起來好像挺多步驟的、挺麻煩的,但是當我們點擊Xcode的運行按鈕時,Xcode會自動按順序執行上面4個步驟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.