typedef与#define 的区别与各自优势

 先用一个简单的例子介绍下typdef

例子1:

typedef struct node{

   char* data;

   struct node *lchild,*rchild;

}bitnode;

bitnode* bNode;

作用:struct node是一个结构体的类型名 就像是int是个类型名一样;

如果不加typedef,就需要struct node *bNode这样定义。

 

例子2:

一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可以用一个指针变量指向该函数指针,然后通过该变量来调用函数。

一般的函数指针的声明格式:   函数返回值类型(*指针变量名)(参数类型列表)int (*pFun)(int, int);

采用typedef 简化定义,typedef 函数返回值类型 (*指针变量名)(参数类型列表)typedef int (*pFun) (int, int);

typedef int (*pFun) (int, int);

int add(int a,int b)

{

   return a+b;

}

int sub(int a,int b)

{

  return a-b;

}

pFun calc_fun(char operType)

{

  switch(operType)

  {

     case '+': return add;//返回函数的地址

     case '-': return sub;

     default:

                  return NULL;

  }

  return NULL;
}

int calc(int a, int b, char operType)

{

     pFun fp = calc_func(op); //根据预算符得到各种运算的函数的地址

     int (*s_fp)(int,int) = calc_func(op);//用于测试

     // ASSERT(fp == s_fp);  // 可以断言这俩是相等的

     if (fp) return fp(a, b);//根据上一步得到的函数的地址调用相应函数,并返回结果

     else return -1;

}

 作用:隐藏复杂和难以理解的语法,增强代码可移植性

—————————————————————————————————————————

再用一些例子介绍下#define。

例子1:

#ifndef _DEMO_H

#define _DEMO_H

.....

#endif

作用:我们在头文件中经常用到的,是个用来防止多个c文件引用头文件是的声明冲突问题。

 例子2:

#define M(y) ((y)*(y)+3*(y)) /*宏定义*/

k=M(5); /*宏调用*/
作用: 带参宏预处理器处理,提高效率

typedef 和#define的不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值