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 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。
例子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 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。
相关文章推荐
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的区别
- #define 和 typedef 的区别
- typedef 与#define 的区别
- typedef和#define的用法与区别
- typedef与#define的区别
- C语言中的typedef(包含与#define的区别)
- typedef与#define的区别
- typedef与#define的区别
- #define和typedef的区别
- 宏定义#define和typedef的区别和典型范例题目辨析
- typedef和#define的用法与区别
- typedef与#define的区别
- const和#define之间的区别,typedef和#define之间的区别
- typedef和#define的用法与区别
- #define与typedef 的区别及C预处理器
- 宏定义#define和类型定义typedef区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别