typedef与#define、static与extern的区别

typedef和#define的区别

首先来清楚二者的用法:

typedef (类型名称) (类型标识符);
表示为一个现有的数据类型定义一个新的别名。
例子:typedef int intname;
表示为int这个数据类型定义了一个intname的别名

而#define;
#define int intname
表示宏定义,在以后的程序中,会把int替换为intname;

区别:
1、可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这么做

#define intname int
unsigned intname i=10;//正确,编译器会把intname替换成int,且可以对i进行扩展为无符号整数
typedef int intname;
unsigned intname i=10;//错误,用typedef定义的int不可扩展

2、typedef 为某一种类型引入新的名字 ,并不为变量分配内存空间
如#define PI 3.14 ——会开辟一片存储空间,存3.14
但typedef int intname;——并不会再另外开辟存储空间,只是取了一个别名而已
3、typedef在编译时处理,有类型检查;#define在预处理阶段进行简单的字符串替换,不进行任何检查
4、#define没有作用域限制,定义过的宏在之后的程序都可以调用;typedef有自己的作用域(在定义函数内)
5、在连续几个变量的声明中,用typedef定义的类型可以保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证:

typedef  char* CharName;
CharName ch1,ch2;//这样可以保证ch1和ch2都是指向字符变量的指针

static和extern区别

static
1、修饰局部变量–>提升局部变量的生存周期;
2、修饰全局变量–>作用域被限制了(限制在当前文件中使用);
3、修饰函数,–>作用域也被限制,只能在当前文件中使用
extern
1、extern置于变量或者函数前,作用域是整个工程,表示变量或者函数的定义在别的文件中,通过在变量前添加extern来访问这个全局变量,
2、extern修饰的变量没有真正的内存

static
定义一个内部变量或者声明一个内部变量
extern
定义一个外部变量或者声明一个外部变量
可以这样说:用static的语句中,全部的操作只能在内部进行,外部不可访问;而使用extern可以使用外部的函数或者变量,在整个程序前声明就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值