【2014年12月5日】【每日一问】在C/C++语言中,typedef和#define有什么区别?

【答】
1. typedef
① typedef通常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
② typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。
③ typedef用来定义类型的别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct)。此外,typedef还可以定义机器无关的类型。
④ typedef有自己的作用域。
⑤ typedef以分号结尾。
⑥ typedef修饰指针类型时:
typedef int * PINT1;
Const PINT1 p; // p不可更改,p指向的内容可以更改,相当于 int * const p;
⑦ typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。


2. #define
① #define是预处理指令,通常用来定义常量(包括无参量与带参量),以及用来实现一些复杂的宏。
② #define是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。
③ #define不但可以为类型取别名,还可以定义常量、变量、编译开关等。
④ #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
⑤ #define不需要以分号结尾。
⑥ #define修饰指针类型时:
#define PINT2 int *
const PINT2 p; // p可以更改,p指向的内容不能更改,相当于const int *p;或int const *p;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值