#define宏与枚举以及typedef关键字的区别

#define宏和枚举

  1. #define宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值。
  2. 一般在调试器里面,可以调试枚举常量,但是不能调试宏常量
  3. 枚举可以一次定义大量相关的常量,但是#define宏一次只能定义一个

#define宏和typedef关键字

typedef的含义是给一个已知的数据类型取一个别名,实际上变量类型没有发生变化。

	typedef struct student{
		// some data
	}stu_st, *stu_pst;
	
	struct student stu1;
	stu_st stu2;
	struct student *stu3;
	stu_st* stu4;
	stu_pst stu5;

以上代码中,stu1和stu2的含义没有区别,stu3,stu4,stu5的含义没有区别。

变量声明对unsigned的扩展支持

以宏的方式定义数据类型

	#define INT32 int
	typedef int int32

以上两种方式编译器都支持,可以理解为将int数据类型取一个int32的别名,但是#define宏是在预编译的时候进行简单替换,但是typedef类型是以一个真正数据类型存在。

	unsigned INT32 index_define = 0; // #define宏定义的大写INT32
	unsigned int32 index_typedef = 0; // typedef定义的小写int32

如上对变量的声明,编译器在编译变量index_typedef 时会报错,而变量index_define 则可以顺利编译通过,这是因为#define宏是进行的一次简单替换,替换后的结果符合编译器编译规则,而typedef命名出的数据类型不支持这种unsigned的扩展。

指针变量声明的区别

	#define PINT int*
	typedef int* pint

	PINT p1,P2;
	pint p3,p4;

以上代码声明的变量,其中p1,p3,p4表示int类型的指针变量,p2表示int类型数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值