typedef和define的对比

来源:互联网 发布:谷歌拍照软件 编辑:程序博客网 时间:2024/05/16 12:48

博客内容来源:网络、书籍和本人整理总结

define只是简单的字符串替换而typedef则是为一个类型取新的名字

example1:

typedef char* p_str1;

#define p_str2 char*;

p_str1 s1,s2;

p_str2 s3,s4;

--》s1,s2,s3都被定义为char *,s4则被定义成char。


example2:

typedef char* p_str;

char string[4] = "abc";

const char *p1 = string;

const p_str p2 = string;

p1++;

p2++;

--》p2++会报错

const p_str p2 = string;中p_str是一种我们自己定义的数据类型,而不可用char *替代!所以p2在此是只读的!

#define宏定义有一个长处:可以使用#ifdef、#ifndef等来进行逻辑判断,还可以用#undef来取消定义!

typedef有一个长处:它符合范围规则,使用typedef定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于定义的此变量位置),而宏定义没有!


typedef和复杂的变量声明:

1)

int  *(*a[5])(int, char*);

-->typedef    int    *(*p_fun)(int, char*);

p_fun是一个类型别名

-->p_fun a[5];

使用定义的新类型来声明对象,等价于int * (*a[5])(int, char*);


2)

void (*b[10])  (void (*)());

-->typedef    void    (*p_fun_param)();

为void (*)()声明一个新类型

-->typedef    void    (*p_fun)(p_fun_param);

整体声明一个新类型

-->p_fun b[10];

使用定义的新类型来声明对象,等价于void (*b[10]) (void (*)());
谢谢阅读!

0 0
原创粉丝点击