typedef

来源:互联网 发布:管家婆的数据在哪里面 编辑:程序博客网 时间:2024/06/10 02:32

最近看Scintillia的源代码,总看到typedef的身影,朋友也说autodesk的面试官曾说过不懂typedef很差劲。于是查了网上的资料,看了几种比较

容易出错的常用用法,做了一些整理。

 

一.起别名的两种用法

 

1. typedef (int *) pInt;

 

2. typedef pInt (int *)

 

比如pInt a,b;

 

<!--more-->

 

第一种表示: int*a;int*b;

 

第二种表示: int*a,b;

 

所以第一种更像一个类型,第二种更像宏。

 

二.旧式代码中声明对象

 

typedef struct tagPoint

 

{

 

Int x;

 

Int y;

 

}POINT;

 

POINT a,b;

 

三.代码简化

 

为复杂的声明定义一个新的简单的别名

 

方法:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版

 

typedef int (*PF) (const char *, const char *);

这个声明引入了 PF 类型作为函数指针的同义字,该函数有两个 const char * 类型的参数以及一个 int 类型的返回值。

 

如果要使用下列形式的函数声明,那么上述这个 typedef 是不可或缺的:

 

PF Register(PF pf);

Register() 的参数是一个 PF 类型的回调函数,返回某个函数的地址,其署名与先前注册的名字相同。如果不用 typedef,那么代码是这样的:

 

int (*Register (int (*pf)(const char *, const char *)))(const char *, const char *);

原创粉丝点击