在上一篇中咱們已經建立了一個C程序,接下來分析一下里面的代碼。html
打開項目中的main.c文件(C程序的源文件拓展名爲.c),能夠發現它是第一個C程序中的惟一一個源文件,代碼以下:ios
#include <stdio.h> int main(int argc, const char * argv[]) { // insert code here... printf("Hello, World!\n"); return 0; }
#include 是C語言的預處理指令之一,所謂預處理,就是在編譯以前作的處理,預處理指令通常以 # 開頭編程
#include 指令後面會跟着一個文件名,預處理器發現 #include 指令後,就會根據文件名去查找文件,並把這個文件的內容包含到當前文件中。被包含文件中的文本將替換源文件中的 #include 指令,就像你把被包含文件中的所有內容拷貝到這個 #include 指令所在的位置同樣函數
若是被包含的文件拓展名爲.h,咱們稱之爲"頭文件"(Header File),頭文件能夠用來聲明函數("函數"就是面向對象中的"方法"),要想使用這些函數,就必須先用 #include 指令包含函數所在的頭文件spa
#include 指令不只僅限於.h頭文件,能夠包含任何編譯器能識別的C/C++代碼文件,包括.c,.hpp,.cpp
等,甚至.txt,.abc
等等均可以
也就是說你徹底能夠將第3行到第9行的代碼放到其餘文件中,而後用 #include 指令包含進來,好比:命令行
1> 將整個main方法代碼放到其餘文件中,而後用 #include 指令包含進來。翻譯
2> 在main.c源文件中包含my.txt文件code
程序仍是能夠照常運行的,由於 #include 的功能就是將文件內容徹底拷貝到 #include 指令所在的位置htm
不過你可能會疑惑,爲何stdio.h用尖括號<>,而my.txt用雙引號"" ?這個很好區別,若是是系統自帶的文件,最好用<>;若是是開發人員本身建立的文件,最好用""對象
說明:這裏用txt文件純屬演示,平時作項目不會這樣作,除非吃飽了撐着,纔會把代碼都寫到txt中去
前面也已經提到,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類型的值,但咱們能夠不返回
stdio.h
是C語言函數庫中的一個頭文件,裏面定義了一些標準輸入輸出函數
。在main.c的第1行代碼中,用#include指令包含了stdio.h文件。
這裏之因此包含 stdio.h
文件,是由於在其中用到了在 stdio.h 內部聲明的printf
函數,這個函數能夠向標準輸出設備(好比顯示器屏幕)輸出數據,屏幕上輸出的文字就是第7行代碼 printf("Hello, World!\n");
形成的,雙引號""
內的文本爲C語言的字符串.
步驟圖以下:
C語言源文件的擴展名爲".c",源文件以ASCII碼形式存儲,不能直接被計算機執行,由於計算機只能識別二進制指令,也就是0和1
把C的源程序翻譯成計算機能夠識別的二進制形式的目標代碼文件,這個過程稱爲編譯,由C的編譯器完成
在編譯的同時,還對源程序的語法等進行檢查。若出現語法錯誤,則編譯失敗。若是編譯成功則生成目標文件,目標文件名跟源程序文件名同樣,擴展名爲".obj"。好比,mj.c編譯後生成目標文件mj.obj
每一個源文件是單獨進行編譯的,假如一個項目中有多個.c源文件,編譯成功會生成多個對應的.obj目標。通常狀況下,目標文件之間是有關聯的,好比 a.obj 可能會調用 b.obj 中定義的一個函數,所以它們都不可以單獨被計算機執行,並且目標文件中並不包含程序運行所須要的庫函數等
將全部有關聯的obj目標文件,以及系統提供的C庫函數等組合在一塊兒生成可執行文件的過程,稱爲"連接"
連接生成的可執行文件的文件名跟源程序文件同名,擴展名爲".exe",計算機能夠直接執行
若是是在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個步驟
注:本文轉自李明傑老師的M了個J博文。