• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c语言define和typedef区别和使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  define完全可以理解替换,typedef代表别名。听着差不多的意思,那2者区别在哪?

  先来个简单例子查看基本使用。

//define和typedef区别
#define DB double  //替换  define 被替换的内容 替换的内容
typedef double db; //别名  typedef 原来的类型名 新的别名
//typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错
 
void main()
{
     //看不出区别
     DB d1 = 1.2,d2=1.8; //等价 double d1 = 1.2,d2=1.8;
     db d3 = 1.9,d4=2.3; //等价  double d3 = 1.9,d4=2.3;
 
     printf("%f,%f",d1,d2);
     printf("\n%f,%f",d3,d4);
 
}

  上面唯一看出的区别就是typedef需要分号。

  通过指针变量来测试2者的区别

#define DP double *
typedef double * dp;

void main2()
{
    DP dp1,dp2; //DP是替换,等价 double *dp1,dp2; //dp1是指针占4个字节,dp2就是double类型数据8字节
    dp dp3,dp4; //都是4字节的指针, 等价于 dobule *dp3,*dp4;

    printf("%d,%d", sizeof(dp1),sizeof(dp2));  //4,8
    printf("\n%d,%d",sizeof(dp1),sizeof(dp2)); //4,4
}

  通过上面例子可以看出define完全就是替换,typedef则不同。

  最后简单说明下,利用利用define和typedef构建函数指针 

 1 void print(int num)
 2 {
 3     printf("时间%d",num);
 4 }
 5 
 6 void main()
 7 {
 8     //函数指针
 9     void(*p)(int num) = print;
10     p(10);
11 }

  但是像上面第9行代码那样写多了会觉得很烦啊,可以使用define和typedef来构建

 1 //typedef int* pint; //给int类型指针别名
 2 typedef void(*p)(int num); //给函数指针类型别名 ,p是类型的别名
 3 #define Pprint(X) void(*X)(int num) //带参数的宏模式
 4 
 5 void main()
 6 {
 7     //函数指针
 8 
 9     //利用typedef
10     p p1 = print;
11     p1(10);
12 
13     //利用define
14     Pprint(p2) = print;
15     p2(33);
16 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
用C#写了个日志类发布时间:2022-07-13
下一篇:
使用C/C++语言编写基于DSP程序的注意事项-文平发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap