C语言-typedef与#define的区别
生活随笔
收集整理的這篇文章主要介紹了
C语言-typedef与#define的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1 typedef
- 1.1 將復雜的聲明簡單化
- 1.2 定義平臺無關的類型
- 1.3 與struct的結合使用
- 1.4 typedef使用公式
- 2 typedef與#define的區別
- 2.1 執行時間不同
- 2.2 功能有差異
- 2.3 作用域不同
- 2.4 對指針的操作
1 typedef
1.1 將復雜的聲明簡單化
聲明了一個返回bool類型并帶有兩個(int和double)形參的函數的指針類型FuncPointer
typedef bool (*FuncPointer)(int, double);聲明了一個FuncPointer類型的函數指針對象pFunc
FuncPointer pFunc;1.2 定義平臺無關的類型
定義與平臺無關的類型,屏蔽不同平臺的類型差異化
比如定義一個叫 REAL的浮點類型,在目標平臺一上,讓它表示最高精度的類型為:
在不支持 long double 的平臺二上,改為:
typedef double REAL;在連 double 都不支持的平臺三上,改為:
typedef float REAL;也就是說,當跨平臺時,只要改下typedef本身就行,不用對其他源碼做任何修改。
1.3 與struct的結合使用
typedef struct __Person {string name;int age;float height; } Person; //這是Person是結構體的一個別名 Person person;1.4 typedef使用公式
2 typedef與#define的區別
2.1 執行時間不同
- 關鍵字typedef在編譯階段有效,由于是在編譯階段,因此typedef有類型檢查的功能
- #define則是宏定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字符串替換,而不進行任何檢查
2.2 功能有差異
- typedef用來定義類型的別名,定義與平臺無關的數據類型,與struct的結合使用等
- #define不只是可以為類型取別名,還可以定義常量、變量、編譯開關等
2.3 作用域不同
- #define沒有作用域的限制,只要是之前預定義過的宏,在以后的程序中都可以使用
- 而typedef有自己的作用域
2.4 對指針的操作
二者修飾指針類型時,作用不同,如
#define POINTER int* // #define 定義int*為POINTER typedef int* pointer; // typedef 定義int*為pointer當使用他們定義多個變量時,由于兩者實現的形式有所不同,效果也不同,如
pointer p1, p2; POINTER p3, p4; int a = 4; p1 = &a; // 正確,p1為指針,將a地址賦值給p1 p2 = &a; // 正確,p2為指針,將a地址賦值給p1 p3 = &a; // 正確,p3為指針,將a地址賦值給p1 p4 = &a; // 錯誤,p4為int型變量總結
以上是生活随笔為你收集整理的C语言-typedef与#define的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言-动态内存分配总结
- 下一篇: C语言经典例1-无重复数字的三位数