您的位置:首页 > 其它

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

2012-11-11 17:29 387 查看
先用一个简单的例子介绍下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 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: