本文是参考谭浩强的《C程序设计》第二版一书所写,总感觉有些重点的地方书中没有提出来,等本人遇到其他重要用法的时候再来补充,或者大家帮我提出来,以便共同学习。
1、用typedef声明新的类型名来代替已有的类型名
[cpp] view plain copy
- typedef int INTEGER;
- typedef float REAL;
这样以下两行代码就可以等价替换了
[cpp] view plain copy
- int i,j;float a,b;
- INTEGER i,j;REAL a,b;
2、用typedef声明一个结构体
[cpp] view plain copy
- typedef struct
- {int month;
- int day;
- int year;
- }DATE;
声明新类型名DATE,它代表上面指定的一个结构体类型,这时就可以用DATE定义变量。
[cpp] view plain copy
- DATE birthday
- DATE *p
其中birthday是一个结构体,具体内容同上DATE结构体。
下面举个例子,是在STM32单片机的流水灯程序中用到的一个结构体。
[cpp] view plain copy
- typedef struct
- {
- uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
- This parameter can be any value of @ref GPIO_pins_define */
- GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
- This parameter can be a value of @ref GPIOSpeed_TypeDef */
- GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
- This parameter can be a value of @ref GPIOMode_TypeDef */
- }GPIO_InitTypeDef;
- GPIO_InitTypeDef GPIO_InitStructure;
这里结构体又嵌套了一个2个结构体,GPIOSpeed_TypeDef、GPIOMode_TypeDef,他们有着跟本结构体相同的定义方式,我们来看一下:
[cpp] view plain copy
- typedef enum
- {
- GPIO_Speed_10MHz = 1,
- GPIO_Speed_2MHz,
- GPIO_Speed_50MHz
- }GPIOSpeed_TypeDef;
[cpp] view plain copy
- typedef enum
- { GPIO_Mode_AIN = 0x0,
- GPIO_Mode_IN_FLOATING = 0x04,
- GPIO_Mode_IPD = 0x28,
- GPIO_Mode_IPU = 0x48,
- GPIO_Mode_Out_OD = 0x14,
- GPIO_Mode_Out_PP = 0x10,
- GPIO_Mode_AF_OD = 0x1C,
- GPIO_Mode_AF_PP = 0x18
- }GPIOMode_TypeDef;
上面我们用GPIO_InitTypeDef GPIO_InitStructure来定义了一个GPIO_InitStructure结构体,他的元素跟GPIO_InitTypeDef一样,我们可以用下面的语句方式来对结构体进行填充
[cpp] view plain copy
- GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
3、用typedef声明数组
如定义数组,原来用如下形式:
[cpp] view plain copy
- int a[10],b[10],c[10],d[10];
由于都是一维数组,大小也相同,可以先将此数组类型声明为一个名字:然后用ARR区定义数组变量:
[cpp] view plain copy
- typedef int ARR[10];
- ARR a,b,c,d;