C语言入门学习笔记之typedef简介
在单片机和操作系统中 typedef 会经常用到,它可以为某一个类型自定义名称。和#define比较类似。但是又有不同的地方。
- typedef 创建的符号只能用于数据类型,不能用于值。而#define 创建的符号可以用于值。
- 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 STRchar *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 STRchar *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_InitTypeDefGPIO_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口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); /PD2 输出高 }
通过 typedef 将结构体重定义为GPIO_InitTypeDef 类型,这样在初始化的时候,直接使用GPIO_InitTypeDef 类型就可以定义一个关于GPIO的结构体。
在定义数据类型的时候,也会用到 typedef 重新定义一个数据类型。
文章图片
通过tepedef 定义新的数据类型,增加了代码的可读性和移植性。这里说的新的数据类型不是创建了一个系统不存在的数据类型,而是给已经存在的某个类型增加了一个方便使用的标签。而这个标签又不同于 #define 只是简单的符号替换。
总结
【C语言入门学习笔记之typedef简介】到此这篇关于C语言入门学习笔记之typedef简介的文章就介绍到这了,更多相关C语言typedef简介内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)