014-預處理指令-C語言筆記

014-預處理指令-C語言筆記

學習目標

1.【掌握】枚舉程序員

2.【掌握】typedef關鍵字web

3.【理解】預處理指令ide

4.【掌握】#define宏定義函數

5.【掌握】條件編譯學習

6.【掌握】static與extern關鍵字spa

1、枚舉

當咱們要描述方向、四季、性別、學歷、婚配狀況等等事物的時候,咱們知道這些事物的取值範圍是很是有限的。好比,性別取值就男、女,四季取值就春、夏、秋、冬。相似這樣的需求,C語言提供了一種構造類型枚舉專門針對此類需求,由程序員本身聲明一種新的數據類型,並給這個新的數據類型聲明幾個固定枚舉值。同時,聲明這個新的數據類型的變量時,給變量賦值的取值範圍就只能賦值咱們類型裏聲明的某個固定枚舉值。指針

枚舉類型的聲明code

語法:enum 枚舉名 {枚舉值1,枚舉值2,...};blog

枚舉變量的聲明ci

語法:enum 枚舉名 變量名;

變量的初始化

語法:enum 枚舉名 變量名 = 枚舉值;

枚舉值對應的整型數值

注意:

1.枚舉也是一種數據類型,類型名是(enum 枚舉名),必需要加上enum關鍵字啊。

2.給枚舉變量初始化或者賦值的時候,取值只能取枚舉類型的枚舉值中的某個值,不能隨意賦值。

3.每個枚舉值對應都有一個整型數值的,從第一個枚舉值開始從0依次遞增。

4.聲明一個枚舉變量的時候,這個變量裏面存的其實是這個枚舉值對應的整型,而不是枚舉值自己。

5.枚舉值命名最好能加上區分這個枚舉值屬於哪一個枚舉類型的標示,好比在枚舉值前面加上枚舉類型名。

實際應用:

 

2、typedef關鍵字

若是你感受有些數據類型太長,難以記憶難以書寫,咱們可使用typedef關鍵字爲各類數據類型定義一個新名字(別名)。

語法:typedef 數據類型 別名;

typedef與普通數據類型

typedef與指針

typedef與結構體

typedef與指向結構體的指針

typedef與枚舉

typedef與指向函數的指針

 

3、預處理指令

讓咱們來回顧一下C程序從編寫源代碼到執行須要的步驟。先編寫符合C語言語法規範的源代碼文件,而後編譯成二進制代碼的目標文件,再而後會進行連接,最終生成可執行文件。其實在編譯以前,還有一個很重要的步驟,系統會自動執行,那就是執行預處理指令。預處理指令是在編譯以前執行的,咱們已經學過#include文件包含指令,今天咱們再來整幾發指令。

4、#define宏定義

在程序編譯以前,會把使用宏名的地方替換成宏值的內容。注意這裏的替換是純潔的替換,不管宏值是表達式仍是數值,甚至是錯誤代碼,都會原模原樣的替換。

語法:#define 宏名 宏值

無參數的宏:使用無參數宏的時候,只是純粹的文本替換

有參數的宏:使用有參數宏的時候,須要調用宏的人傳入一個值做爲宏值的一部分

注意:

1.當宏值是一個表達式,宏值的語法錯誤不會報錯,由於檢查語法是在編譯的時候乾的。

2.當宏值是一個表達式,替換宏名也是替換源代碼中使用宏名的地方,因此特別注意替換後的運算符優先級問題。

3.宏值當中若是有變量,使用宏值以前必需要先聲明這個變量。

4.若是雙引號中出現了宏名,其實這個不是宏名,只是和宏名很像的字符串。

5.宏能夠定義在任何地方,能被使用的做用域是從定義開始到文件結束。

5、條件編譯

20136256945

在不少狀況下,咱們但願程序的其中一部分代碼只有在知足必定條件時才進行編譯,不然不參與編譯,這就是條件編譯。

語法:

執行順序:若是條件1知足,則代碼1參與編譯。若是條件1不知足,條件2知足,則代碼2參與編譯。若是條件1和條件2都不知足,則執行代碼3。

第一種狀況,判斷宏值是否知足條件

第二種狀況,判斷一個宏有被定義

第三種狀況,判斷一個宏沒有被定義

注意:

1.條件編譯必定要使用宏進行條件判斷,不能使用變量,由於變量的值是在程序執行的時候才賦值的。

2.#endif表示這個條件編譯結束,必定不能少,否則會發生一些不可預料的事情。

3.條件編譯只會編譯符合條件的那一個分支編譯成二進制代碼。

6、static與extern關鍵字

static與函數

若是一個函數被static關鍵字修飾,只能在當前模塊中使用,就至關於內部函數咯。

extern與函數

若是一個函數被extern關鍵字修飾,能夠在當前模塊中使用,也能被其餘模塊共享,不過默認函數就是被extern修飾的,能夠省略不寫。

static與變量

被static修飾的局部變量會聲明在常量區中,函數執行完畢後不會被釋放,只有程序執行結束纔會釋放。

被static關鍵字修飾的全局變量只能在當前模塊中使用,不能被其餘模塊共享,至關於私有全局變量。

main.c文件

test.h文件

test.c文件

extern與變量

extern不能修飾局部變量,被extern修飾的全局變量能夠在當前模塊中使用,也能被其餘模塊共享。不過默認全局變量就是extern修飾的,因此咱們能夠省略(Xcode6.3前是默認加extern的,Xcode6.3後必須本身在聲明裏加上extern,但定義的地方能夠不寫)。

main.c文件

test.h文件

test.c文件

相關文章
相關標籤/搜索