tpyedef复杂功能使用

说在前面:文档根据工作都是在有道云笔记保存,这些都是存货。发布出来大家学习,希望对大家有帮助!

 

typedef的功能总结如下:

1.定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。

如:

char * a,b;

用typedef char* PCHAR;

PCHAR a,b;

很容易让人明白a,b是字符类型的指针。(char point)

2.用在旧的C代码中,帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名对象名。

如:

struct tagPOINT

 {

    int x;

    int y; 

};

struct tag p1;

 

typedef struct tagPOINT

{

    int x;

    int y;

}POINT;

 

POINT p1;

可以省略对struct的书写。

3.用typedef来定义与平台无关的类型。

比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:

typedef long double REAL;

在不支持 long double 的平台二上,改为:

typedef double REAL;

在连 double 都不支持的平台三上,改为:

typedef float REAL;

也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

标准库就广泛使用了这个技巧,比如size_t。另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏来得稳健。

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

(这种用法是比较复杂的,出现的频率也不少,在开源代码里面经常能看到,用这种方法对函数进行简化的引用)

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

得到的就是原声明的最简化版。

举例1): 

 原声明:void (*b[10]) (void (*)());

变量名为b,先替换右边部分括号里的,pFunParam为别名一:

typedef void (*pFunParam)();

再替换左边的变量b,pFunx为别名二:

typedef void (*pFunx)(pFunParam);

原声明的最简化版:

pFunx b[10];

 

 举例2):

原声明:doube(*)() (*e)[9];

变量名为e,先替换左边部分,pFuny为别名一:

typedef double(*pFuny)();

再替换右边的变量e,pFunParamy为别名二

typedef pFuny (*pFunParamy)[9];

原声明的最简化版:

pFunParamy e;

typedef要注意的一个用法:

typedef char * pStr;

const char *p1;

const pStr p2;

const char *p1中限定符对p1指向的字符变量进行限定,解释为指向的变量为常量。

const  pStr p2中的p2的数据类型是我们自己定义的而不是系统固有类型而已。

因此,const pStr p2的含义是:限定数据类型为char *的变量p2进行限定,p2为常量指针。

 

你可能感兴趣的:(tpyedef复杂功能使用)