typedef用法

用途一:

定义一种类型的别名,而不只是简单的宏替换,可以用作同时声明指针型的多个对象
typedef char* PCHAR; // 一般用大写
PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针

用途二:
用在旧的C的代码中(具体多旧没有查),帮助struct,以前的代码中,声明struct新对象时,必须要带上struct

struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;

而在C++中,则可以直接写:结构名 对象名,即:
tagPOINT1 p1;

估计某人觉得经常多写一个struct太麻烦了,于是就发明了:

typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候

用途三:
用typedef来定义与平台无关的类型。

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

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

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

用途四:
为复杂的声明定义一个新的简单的别名,在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版

理解复杂声明可用的“右左法则”:
从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完

两大缺陷:

1.typedef是定义了一种类型的新别名,不同于宏,不是简单字符串替换;

typedef char* PSTR;
int mystrcmp(const PSTR, const PSTR);

const PSTR并不相当于const char*,而是相当于char*const,因为const给予了整个指针本身常量性,即常量指针char*const;

2.typedef在语法上是一个存储类的关键字,(如auto、extern、mutable、static、register等一样)

typedef static int INT2; //不可行

编译将失败,会提示“指定了一个以上的存储类”。

posted @ 2020-03-12 20:11  坦坦荡荡  阅读(303)  评论(0编辑  收藏  举报