typedef和#define的区别

一、typedef一般用来给类型取别名(type即类型)。如:

typedef struct Person{
char name[50];
int age;
} PersonNew;

此时下面3种定义对象的写法都正确:

Person person;
struct Person person;
PersonNew person;

或者用于函数指针,如:

typedef int (*FuncPtr)(int, int);

而#define是宏替换,一般用于常量、简单函数和条件编译,如:

//常量
#define MAX_NUM 100
//简单函数
#define PRINT_MSG(msg) printf("Message: %s\n", msg)

//条件编译
#define DEBUG_MODE
#ifdef DEBUG_MODE
    // 在调试模式下执行的代码
#else
    // 在发布模式下执行的代码
#endif

二、#define是预编译阶段直接进行,而typedef是编译阶段执行

#include <iostream>
using namespace std;

#define MyInt int
typedef int YourInt;

int main()
{
	MyInt a = 0; //正确
	YourInt b = 1; //正确
	unsigned YourInt c = 2; //错误
    return 0;
}

unsigned YourInt c的写法不行,是因为编译器读到unsigned后,先将unsigned看作一个类型了(和unsigned int同义),再编译到YourInt时,将它处理为int,此时就变成unsigned int int,所以报错。

三、使用#define定义指针时,容易犯“就近原则”的错误,但typedef不会。如下:

#include <stdio.h>

int main()
{
	#define PCHAR char*
	PCHAR a, b;
	printf("sizeof(a) is %u, sizeof(b) is %u\n", sizeof(a), sizeof(b));
	
	typedef char* PCHR;
	PCHR c, d;
	printf("sizeof(c) is %u, sizeof(d) is %u\n", sizeof(c), sizeof(d));

	return 0;
}

在64位操作系统上的输出是:

sizeof(a) is 8, sizeof(b) is 1
sizeof(c) is 8, sizeof(d) is 8

说明a, c, d是指针,而b不是。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码到程攻

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

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

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

打赏作者

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

抵扣说明:

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

余额充值