C语言 typedef 和 define 区别 - C语言零基础入门教程
目錄
- 一.typedef 簡介
- 1.typedef 簡化復(fù)雜的類型聲明
- A.定義普通變量
- B.定義函數(shù)指針
- C.定義結(jié)構(gòu)體
- 2.定義與平臺無關(guān)的類型
- 1.typedef 簡化復(fù)雜的類型聲明
- 二.define 簡介
- 三.typedef 和 define 區(qū)別
- 1.執(zhí)行時間不同
- 2.功能有差異
- 3.作用域不同
- 四.猜你喜歡
零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語言基礎(chǔ)入門
一.typedef 簡介
C 語言 typedef 是為現(xiàn)有的類型起一個別名,使用起來更加的方便,注意:它并沒有產(chǎn)生新的類型;
1.typedef 簡化復(fù)雜的類型聲明
A.定義普通變量
typedef int REAL_TYPE;REAL_TYPE a = 10; //等價 int a = 10; printf("a=%d",a);B.定義函數(shù)指針
//聲明了一個返回 bool 類型并帶有兩個(int和double)形參的 typedef bool (*FuncPointer)(int, double);函數(shù)的指針類型FuncPointer FuncPointer pFunc; //聲明了一個FuncPointer類型的函數(shù)指針對象pFuncC.定義結(jié)構(gòu)體
**在 C 語言中,如果定義結(jié)構(gòu)體的時候沒有聲明 typedef,聲明結(jié)構(gòu)體變量時就必須用struct 來聲明,否則會報錯;**示例如下:
//不使用typedef struct _Person {string name;int age;float height; }; struct _Person person; //C語言中必須添加struct,C++可以不添加struct//使用typedef typedef struct _Person {string name;int age;float height; }Person; Person person;//使用typedef定義變量更加簡單在 C++ 中定義結(jié)構(gòu)體時即便沒有聲明 typedef ,聲明變量不添加 struct 也可以正常使用;
2.定義與平臺無關(guān)的類型
用 typedef 來定義與平臺無關(guān)的類型,例如:同一份代碼需要在 Linux / Mac / windows 使用,而每個平臺都有不同的差異,可以通過以下方式解決:
#ifdef __APPLE__ //MAC平臺:REAL_TYPE表示 int 類型 typedef int REAL_TYPE; #elif WIN32 //Windows平臺:REAL_TYPE表示 int 類型 typedef double REAL_TYPE; #else //Linux平臺:REAL_TYPE表示 bool 類型 typedef bool REAL_TYPE; #endif重上面代碼可以看出,在不同的平臺定義 REAL_TYPE 變量時,對應(yīng)的數(shù)據(jù)類型都不一樣,重而可以達(dá)到根據(jù)平臺的差異性自定義設(shè)置的問題!
二.define 簡介
C 語言中,可以用 #define 定義一個標(biāo)識符來表示一個常量/函數(shù),用 #define 定義標(biāo)識符的一般形式為:
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 typedef 和 define 區(qū)別 //@Time:2021/06/27 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************///定義常量 #define MAX_VALUE 100 //定義整型變量MAX_VALUE值為100 #define USER_NAME "huge" //定義字符串變量USER_NAME值為"huge" #define PI 3.1415926 //定義浮點數(shù)變量PI值為3.1415926 //定義簡單函數(shù) #define MAX(a,b) (a>b)?a:b //取兩個數(shù)最大值 #define MIN(a,b) (a<b)?a:b //取兩個數(shù)最小值 //定義復(fù)雜多行的函數(shù) #define MACRO(arg1, arg2) do { \\ stmt1; \ stmt2; \\ } while(0) 關(guān)鍵是要在每一個換行的時候加上一個 "\ "凡是以#開頭的均為預(yù)處理指令,預(yù)處理又叫預(yù)編譯。預(yù)編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統(tǒng)自動完成的。
使用 define 定義一個多行的復(fù)雜函數(shù),關(guān)鍵是要在每一個換行的時候加上一個 \;
三.typedef 和 define 區(qū)別
1.執(zhí)行時間不同
關(guān)鍵字 typedef 在編譯階段有效,由于是在編譯階段,因此 typedef 有類型檢查的功能。
[#define](https://www.codersrc.com/archives/8894.html) 則是宏定義,發(fā)生在預(yù)處理階段,也就是編譯之前,它只進(jìn)行簡單而機(jī)械的字符串替換,而不進(jìn)行任何檢查。凡是以 # 開頭的均為預(yù)處理指令,預(yù)處理又叫預(yù)編譯。預(yù)編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統(tǒng)自動完成的。
2.功能有差異
- typedef 用來定義類型的別名,定義與平臺無關(guān)的數(shù)據(jù)類型,與 struct 的結(jié)合使用等。
- #define 不只是可以為類型取別名,還可以定義常量、變量、編譯開關(guān)等。
3.作用域不同
#define 沒有作用域的限制,只要是之前預(yù)定義過的宏,在以后的程序中都可以使用;
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 typedef 和 define 區(qū)別 //@Time:2021/06/27 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/void func1() {#define HW "HelloWorld"; } void func2() {string str = HW;cout << str << endl; }typedef有自己的作用域;
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 typedef 和 define 區(qū)別 //@Time:2021/06/27 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/void func1() {typedef unsigned int UINT; } void func2() {UINT uValue = 5;//error C2065: 'UINT' : undeclared identifier }四.猜你喜歡
未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語言 typedef 和 define 區(qū)別
總結(jié)
以上是生活随笔為你收集整理的C语言 typedef 和 define 区别 - C语言零基础入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全网最细之接口的定义与实现
- 下一篇: C语言 指针和数组区别 - C语言零基础