C語言typedef用法
良好的代碼習慣和高效的類型定義在項目中扮演著至關重要的角色。typedef,它不僅是一個語法糖,更是提升代碼質量和可維護性的利器。在這篇文章中,將為你介紹typedef 4 種應用方式。
應用一、為基本數據類型定義新的類型名
用uint32_t替代unsigned int聲明變量
/* 變量名重定義 */
typedef unsigned int uint32_t;
/* 定義一個`unsigned int`類型的變量 */
uint32_t count = 0;
應用二、為自定義數據類型(結構體、共用體和枚舉類型)定義簡潔的類型名稱
使用結構體定義以及聲明結構體變量:
struct TagPoint
{
double x;
double y;
double z;
};/* 定義一個三維坐標結構體 */
/* 聲明一個三維坐標點 */
struct TagPoint point = {0, 0, 0};
使用typedef代替結構體定義以及聲明結構體變量:
typedef struct
{
double x;
double y;
double z;
} TagPoint;/* 定義一個三維坐標結構體 */
/* 聲明一個三維坐標點 */
TagPoint point = {0, 0, 0};
應用三、定義數組類型
定義多個同緯度的數組:
int v[3];
int i[3];
使用typedef重定義:
/* 定義數組類型 */
typedef int arry_int_3[3];
/* 等價于 int v[3] */
arry_int_3 v;
應用四、定義指針類型
1、定義數組指針類型
/* 普通數組指針 */
int (*arr_p)[5];//定義了一個數組指針變量arr_p,arr_p可以指向一個int a[5]的一維數組
/* 使用typedef */
typedef int(*Arr_P)[5];//定義一個指針類型,該類型的指針可以指向含5個int元素的一維數組
int a[5] = {1,2,3,4,5};
Arr_P p;//定義數組指針變量p
p= &a;//完全合法,無警告
p= (Arr_P)&a;//類型強制轉換為Arr_P,完全合法,無警告
2、定義函數指針類型
有一個函數原型如下:
/* 函數原型 */
int32_t write_adc_reg(uint32_t reg_addr, uint32_t data, uint32_t chip_id);
int32_t write_spi_reg(uint32_t reg_addr, uint32_t data, uint32_t chip_id);
普通定義一個函數指針指向這個函數:
/* 普通函數指針定義和使用 */
int32_t (*write_adc_reg_p)(uint32_t, uint32_t, uint32_t);
int32_t (*write_spi_reg_p)(uint32_t, uint32_t, uint32_t);
/* 選擇不同的寫入接口 */
write_adc_reg_p = write_adc_reg;
write_spi_reg_p = write_spi_reg;
/* 調用 */
int32_t result = write_reg_p(0x10, 0x55, 0);
使用typedef:
/* 定義函數指針類型 */
typedef int32_t (*WriteReg_P)(uint32_t, uint32_t, uint32_t);
/* 聲明兩個函數指針變量 */
WriteReg_P write_adc_reg_p = write_adc_reg;
WriteReg_P write_spi_reg_p = write_spi_reg;
/* 調用 */
int32_t adc_val = write_adc_reg_p(0x10, 0x55, 0);
五、總結
typedef 是 C 語言中非常實用的工具,它不僅能提升代碼的可讀性,還便于后續維護和擴展。在嵌入式開發中,通過合理使用 typedef,我們可以簡化結構體、指針、函數指針等復雜類型的聲明,讓代碼更清晰、表達更簡潔。

浙公網安備 33010602011771號