c語(yǔ)言中typedef和define區(qū)別 typedef和define的區(qū)別?
typedef和define的區(qū)別?#Define是一條編譯器預(yù)處理指令。它在編譯器預(yù)處理過(guò)程中更改,而不檢查正確性。不管正確與否,它只是被帶進(jìn)來(lái)替換的。只有在編譯擴(kuò)展的源程序時(shí),才能發(fā)現(xiàn)并報(bào)告可能的
typedef和define的區(qū)別?
#Define是一條編譯器預(yù)處理指令。它在編譯器預(yù)處理過(guò)程中更改,而不檢查正確性。不管正確與否,它只是被帶進(jìn)來(lái)替換的。只有在編譯擴(kuò)展的源程序時(shí),才能發(fā)現(xiàn)并報(bào)告可能的錯(cuò)誤。2Typedef是C語(yǔ)言的關(guān)鍵字,用于定義數(shù)據(jù)類型的新名稱。兩者的區(qū)別如下:#define a int*tepedef int*a;(這是一個(gè)語(yǔ)句,加了一個(gè)分號(hào))兩者的作用都是表示int*,但是#define在預(yù)處理時(shí)做了一個(gè)簡(jiǎn)單的替換,而typedef不是一個(gè)簡(jiǎn)單的替換。Typedef將a定義為指向int*的指針。defined by#define只是一個(gè)替代品。擴(kuò)展數(shù)據(jù):typedef還有另一個(gè)重要用途,即定義與機(jī)器無(wú)關(guān)的類型。例如,您可以定義一個(gè)名為real的浮點(diǎn)類型,它可以在目標(biāo)計(jì)算機(jī)上實(shí)現(xiàn)最高精度:typedef long double real。在不支持long double的計(jì)算機(jī)上,typedef將如下所示:typedef double real在不支持double的計(jì)算機(jī)上,typedef如下所示:typedef float real
1。Typedef要寫(xiě)出成語(yǔ)句的形式,即在句尾加分號(hào)(),#define是宏定義,句尾沒(méi)有分號(hào)
2。Typedef是現(xiàn)有數(shù)據(jù)類型的別名,用于表示該數(shù)據(jù)類型,例如:
Typedef unsigned int Uint32
Uint32 a,B,C//找到三個(gè)無(wú)符號(hào)整數(shù)變量
#define是定義一個(gè)宏名稱,以表示其后的字符串或表達(dá)式。它只是一個(gè)簡(jiǎn)單的字符替換。在預(yù)處理階段
編譯器將用后面的字符串或表達(dá)式替換所有宏名,而不進(jìn)行任何操作。例如,
#define n 10//使用n表示常量10
#define max(a,b)(a>B?A:b)//使用宏名max和參數(shù)來(lái)表示表達(dá)式(A>B?答:b)。
調(diào)用時(shí):
int,a=3,B=4
max(a,B)//等價(jià)于(a>B?A:b)因?yàn)樗皇莻魅雽?shí)際參數(shù),然后進(jìn)行簡(jiǎn)單的字符替換。
]~]#define是在C中定義的語(yǔ)法,typedef是在C中定義的語(yǔ)法,兩者都可以在C中使用,但是#define成為預(yù)編譯指令,typedef被視為語(yǔ)句。
1. 首先,兩者的執(zhí)行時(shí)間不同
關(guān)鍵字typedef在編譯階段是有效的。因?yàn)閠ypedef處于編譯階段,所以它具有類型檢查功能。
Define是一個(gè)宏定義,它發(fā)生在預(yù)處理階段,即編譯之前。它只執(zhí)行簡(jiǎn)單而機(jī)械的字符串替換而不進(jìn)行任何檢查。
2. 不同的函數(shù)
typedef用于定義類型的別名。這些類型不僅包括內(nèi)部類型(int、char等),還包括自定義類型(如struct),這可以使類型易于記憶。
#Define不僅可以將別名作為類型,還可以定義常量、變量、編譯開(kāi)關(guān)等。
3. 范圍不同
#define沒(méi)有范圍限制。只要它是預(yù)定義的宏,就可以在將來(lái)的程序中使用。Typedef有自己的作用域。
4. 指針操作
在修改指針類型時(shí),它們有不同的函數(shù)。