#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區別與聯絡
- define和typedef的區別
- #define 與 typedef
- typedef關鍵字
- typedef和define具體的詳細區別
- 巨集定義和列舉型別的區別型別
- #define、const、typedef的差別
- 淺談typedef與define
- C++typedef宣告,enum列舉型別C++型別
- typedef和typename關鍵字 (轉)
- C語言中關鍵字typedef、enum的使用C語言
- 指標 與 陣列 以及 a 與 &a的區別指標陣列
- final與static關鍵字的區別?(skycto JEEditor)
- define巨集定義和const常量定義之間的區別
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- iOS常用關鍵字static、const、extern、defineiOS
- Python3 關鍵字nonlocal和global的用法與區別Python
- 預設引數和關鍵字參數列面上最大的區別是?
- 識別符號與關鍵字符號
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- define和defined區別
- select into 時有無strict關鍵字的區別
- Go 語言 new 和 make 關鍵字的區別Go
- iOS開發中各種關鍵字的區別iOS
- C++巨集定義#defineC++
- 介面和列舉在方法中的區別
- 【學習筆記】make 和 new 關鍵字的區別筆記
- SQL Server 和 MySql 語法和關鍵字的區別ServerMySql
- const、define 和 static 的區別
- C 語言巨集定義 #define 的理解與資料整理
- 引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別陣列
- const關鍵字在C與C++中修飾變數的區別C++變數
- 關於C++列舉型別C++型別
- 區塊鏈關鍵字的解析區塊鏈
- 關於mssql中go等幾個關鍵字的用途及區別SQLGo
- abstract關鍵字 super 關鍵字 類與繼承繼承
- C語言include關鍵字和引用.h .c的區別C語言