C语言之typedef和define

typedef 和***define*** 的区别:
#define
是***预处理指令***,编译的时候只是简单的进行替换。

typedef 是c语言中的***关键字***,用来给已存在的类型定义别名。
在STM32官方库中我们可以看到大量的使用到了这个关键字。
如下面这个:

typedef struct
{
	uint16_t GPIO_Pin;           
	GPIOSpeed_TypeDef GPIO_Speed; 
	GPIOMode_TypeDef GPIO_Mode;  
}GPIO_InitTypeDef;

正是因为这个关键字,我们在库中看到了大量新的类型,使刚接触库开发的同学一下都懵了。
只要理解这个关键字只是一个替换就行了(不是简单的替换不能像Include一样,下面给例子做理解。)

#include<stdio.h>
#define  p    int*
void main()
{
  int c=3;
  p a,b;
  a=&c;
  b=&c;
  printf("%d\n",*a);
  printf("%d\n",*b); 
}

这段代码编译不通过,原因是为什么呢,我们来分析一下,
p a,b; 问题是 int * a,b; 这两句话相等吗,预处理器是这样翻译的吗。
int * a,b; 这句话的意思是 定义两个变量 ,指向整型的指针a,b;
如果翻译过来,是这样的话,那么程序是不会出错的,那为什么呢? 其实翻译过来,实际被翻译成了这样
int* a,int b;
我们可以看到 在使用#define定义新类型是,与我们想要的不一样,容易出错。
有麻烦就有解决麻烦的, 来看看 typedef ,好东西,大家要牢牢的记住。
我们把上面的程序改变

#include<stdio.h>
typedef p int* 
void main()
{
  int c=3;
  p a,b;
  a=&c;
  b=&c;
  printf("%d\n",*a);
  printf("%d\n",*b); 
}

这一次看看运行结果,和我们想要的结果一样。
这下,你应该感悟到了#define 和typedef 的区别了吧。

所以在以后的开发中,我们要定义新的数据类型是使用 typedef 就行了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值