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