typedef与define的用法区别

一、typedef的用法

typedef常用来为某一类型自定义名称和复杂的类型命名,它是语言编译的一部分,它的定义的作用域取决于它定义所在的位置,如果定义在函数中,就具有局部作用域,受限于所在的函数;定义在函数外就具有文件作用域,注意结尾有“;”。

举例:

typedef  unsigned  char  uchar;

uchar  y[10];

这里uchar相当于unsigned  char,定义了一个指向unsigned  char型的有10个元素的数组。


二、#define的用法

#define是一宏定义语句,通常用来定义常量,它在预处理阶段完成。每行#define都由三部分组成,第一部分是#define其自身;第二部分是选定的缩写,或称为宏;第三部分为替换体,在预处理时用替换体代替宏。注意结尾无“;”。例如:

#include <stdio.h>
#define  TWO  2

int  main()
{
    int  x  =  TWO;
    printf("x = %d\n",x);
    
    return  0;
}

在程序预处理时,预处理器在程序中找到了对应的宏TWO,于是用2代替了TWO,int  x  =  TWO变成了int  x  =  2。


三、typedef与#define的区别

typedef只是为了增强可读性从而给类型起别名,而#define在C中本是为了定义常量,但目前也常看到它用来作为起别名的工具。这也使得有的人对它们的概念慢慢混淆。

typedef和#define的区别在于:

① typedef创建的符号名只受限于类型,不能用于值。如typedef  TWO  2在对程序编译时会出现报错。

② typedef在编译时处理,而#define是预处理命令,在预处理阶段处理。

③ define只进行简单的替换,而typedef不是简单的替换,其别名有一定的封装性。看下面的例子:

typedef    INT1   (int *) ;

#define   INT2    (int *);   

对于上面的两句语句,“INT1 a,b;”和“INT2 a,b;”的效果相同吗?实则不是。

INT1 a,b中等效于int * a和int * b两个整型指针变量,而对于INT2 a,b则为int * a和int b,只有前一个为整型指针类型,这也说明了简单替换的说法。







 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值