您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么使用C語言中的typedef”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在單片機和操作系統中 typedef 會經常用到,它可以為某一個類型自定義名稱。和#define比較類似。但是又有不同的地方。
typedef 創建的符號只能用于數據類型,不能用于值。而#define 創建的符號可以用于值。
typedef 是由編譯器來解釋,而不是預處理器。
typedef 使用起來更加靈活。
下面使用typedef定義一個數據類型
int main() { typedef unsigned char BYTE; BYTE c = 10; printf("%d \r\n",c); system("pause"); return 0; }
使用typedef將unsigned char類型重新定義為BYTE類型,然后在使用新的類型BYTE定義一個變量c。輸出結果如下:
此時如果使用 #define 來替換,好像也可以。
這里使用 #define 將unsigned char替換為 BYTE好像也正確。
下面在看一個例子。
int main() { typedef char * STR; STR s1,s2; s1="abc"; s2="123"; printf("%s %s \r\n",s1,s2); system("pause"); return 0; }
將字符指針 char * 重新定義為STR類型,然后使用STR定義兩個指針s1和s2,這樣s1和s2都是指向字符的指針。接著給這兩個指針賦值,然后打印出來。
這時使用 #define 來替換 typedef 的功能。
#define STR char * int main() { STR s1,s2; s1="abc"; s2="123"; printf("%s %s \r\n",s1,s2); system("pause"); return 0; }
這時候編譯程序的時候,程序會報錯。
這時為什么呢?因為使用typedef的時候,是定義了一個新的數據類型。
typedef char * STR; STR s1,s2;
相當于
char *s1, *s2; s1="abc"; s2="123";
s1和s2都是指向字符類型的指針。
如果使用 #define 的時候,系統只是簡單的替換。
#define STR char * STR s1,s2;
將STR用 char * 進行替換
char *s1,s2; s1="abc"; s2="123";
替換后只有s1是指針,s2依然是一個char類型的變量。所以給s2賦值一個字符串的時候系統就會報錯。因此要重新定義一個數據類型的時候,要使用typedef,這個在定義結構體的時候使用的非常多。
typedef struct Date { int year; int month; int day; } DT;
使用typedef 將結構體 struct Date 重新定義為DT類型,這樣在使用DT定義變量的時候,就相當于使用了 struct Date 來定義變量。
typedef struct Date { int year; int month; int day; } DT; DT d1 = {2021,10,1}; DT d2 = {2021,10,10};
等價于
struct Date { int year; int month; int day; }; struct Date d1 = {2021,10,1}; struct Date d2 = {2021,10,10};
這樣通過使用 typedef 來重新定義一個新的類型,使代碼寫起來更加的簡潔。這種方法在單片機的庫函數中使用的最多。
typedef struct { uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //LED0-->PA8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); /PD2 輸出高 }
通過 typedef 將結構體重定義為GPIO_InitTypeDef 類型,這樣在初始化的時候,直接使用GPIO_InitTypeDef 類型就可以定義一個關于GPIO的結構體。
在定義數據類型的時候,也會用到 typedef 重新定義一個數據類型。
通過tepedef 定義新的數據類型,增加了代碼的可讀性和移植性。這里說的新的數據類型不是創建了一個系統不存在的數據類型,而是給已經存在的某個類型增加了一個方便使用的標簽。而這個標簽又不同于 #define 只是簡單的符號替換。
“怎么使用C語言中的typedef”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。