【C语言】typedef 和 #define 的区别

typedef#define 的区别:

1.#define

#define是用来定义标识符常量,定义宏的。

语法:
#define name stuff

①定义标识符常量

我们可以在代码中定义一些#define的值,而当我们进行到预编译的时候,我们代码中的名字就会被替换。

比如:

#define MAX 100
//当我们定义一个MAX为100
int main()
{

	int a = MAX;
	printf("%d", a);

	return 0;
}

经历了预处理的过程后,其实代码中会变成这样:

//#define消失了
int main()
{

	int a = 100;//MAX被替换为#define定义的值
	printf("%d", a);

	return 0;
}

而且#define定义的不止是一些数值,还可以定义一些标识符常量:

#define db double
//比如我嫌double变量名字太长,我把他定义为db
int main()
{

	db a = 5.5;
	printf("%lf", a);
    //打印结果:5.500000
	return 0;
}

还有很多例子:

#define do_forever for(;;)     //用更形象的符号来替换一种实现
#define CASE break;case        //在写case语句的时候自动把 break写上。

2.typedef

typedef是在C和C++编程语言中一个关键字。它用来对一个资料类型起一个新名字。目的是为了使源代码更易于阅读和理解。

typedef在C语言中为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

比如:

typedef double db;

int main()
{
	db a = 5.5;
	printf("%lf", a);
	return 0;
}

3.typedef 和 #define 的区别

  1. #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

  2. typedef是在编译时才处理的。

  3. 一般来说#define定义的宏是没有作用域限制的,只要在使用前有定义就可以使用。而typedef定义的别名是有作用域的。

而关于这两者,有一个经典例题:

#define prt_t int *
typedef int* prt_t2;

int main()
{
	prt_t p1, p2;
	
	prt_t2 p3, p4;
    //这里分别定义的是什么?
	return 0;
}

对于prt_t p1, p2;来说,在预处理后会替换成int *p1,p2;,也就是说替换后不难看出,p1是指针,p2是整形。而prt_t2 p3, p4;中定义的p3和p4,都是指针类型。

所以对于#define 定义的宏定义只是简单的字符串代换(原地扩展),而typedef的新名字同样是一种类型,只是叫法不一样了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒等于C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值