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