#define巨集與列舉以及typedef關鍵字的區別
#define巨集和列舉
- #define巨集常量是在預編譯階段進行簡單替換,列舉常量則是在編譯的時候確定其值。
- 一般在偵錯程式裡面,可以除錯列舉常量,但是不能除錯巨集常量
- 列舉可以一次定義大量相關的常量,但是#define巨集一次只能定義一個
#define巨集和typedef關鍵字
typedef的含義是給一個已知的資料型別取一個別名,實際上變數型別沒有發生變化。
typedef struct student{
// some data
}stu_st, *stu_pst;
struct student stu1;
stu_st stu2;
struct student *stu3;
stu_st* stu4;
stu_pst stu5;
以上程式碼中,stu1和stu2的含義沒有區別,stu3,stu4,stu5的含義沒有區別。
變數宣告對unsigned的擴充套件支援
以巨集的方式定義資料型別
#define INT32 int
typedef int int32
以上兩種方式編譯器都支援,可以理解為將int資料型別取一個int32的別名,但是#define巨集是在預編譯的時候進行簡單替換,但是typedef型別是以一個真正資料型別存在。
unsigned INT32 index_define = 0; // #define巨集定義的大寫INT32
unsigned int32 index_typedef = 0; // typedef定義的小寫int32
如上對變數的宣告,編譯器在編譯變數index_typedef 時會報錯,而變數index_define 則可以順利編譯通過,這是因為#define巨集是進行的一次簡單替換,替換後的結果符合編譯器編譯規則,而typedef命名出的資料型別不支援這種unsigned的擴充套件。
指標變數宣告的區別
#define PINT int*
typedef int* pint
PINT p1,P2;
pint p3,p4;
以上程式碼宣告的變數,其中p1,p3,p4表示int型別的指標變數,p2表示int型別資料。
相關文章
- typedef與define的區別
- define和typedef的區別
- typedef關鍵字
- out關鍵字和ref關鍵字的區別
- C語言中關鍵字typedef、enum的使用C語言
- final與static關鍵字的區別?(skycto JEEditor)
- 侯巨集:數字化轉型的誤區與公司戰略的關鍵
- iOS常用關鍵字static、const、extern、defineiOS
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- Python3 關鍵字nonlocal和global的用法與區別Python
- 預設引數和關鍵字參數列面上最大的區別是?
- select into 時有無strict關鍵字的區別
- const、define 和 static 的區別
- 識別符號與關鍵字符號
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- Go 語言 new 和 make 關鍵字的區別Go
- const關鍵字在C與C++中修飾變數的區別C++變數
- 介面和列舉在方法中的區別
- 引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別陣列
- 【學習筆記】make 和 new 關鍵字的區別筆記
- Python 關於TCP簡介以及與UDP的區別PythonTCPUDP
- C++中巨集定義#define的用法C++
- 區塊鏈關鍵字的解析區塊鏈
- C語言include關鍵字和引用.h .c的區別C語言
- Volatile關鍵字&&DCL單例模式,volatile 和 synchronized 的區別單例模式synchronized
- PHP 列舉型別的管理與設計PHP型別
- abstract關鍵字 super 關鍵字 類與繼承繼承
- PHP 定義常量 define 和 const的區別PHP
- 如何理解自動化測試資料驅動與關鍵字驅動的區別?
- PHP 中的陣列相加操作以及與 array_merge 之間的區別PHP陣列
- 列舉型別型別
- break與continue關鍵字
- C語言 關鍵字const的作用 const int* 和int *const 的區別C語言
- mssql sqlserver in 關鍵字在值為null的應用舉例SQLServerNull
- java中的列舉型別Java型別
- Rust的列舉型別EnumRust型別
- php中const和define有什麼區別PHP
- DM 關鍵字、遮蔽關鍵字