回 帖 发 新 帖 刷新版面

主题:[讨论]请教 typedef 的使用方法

typedef是否就是一个定义近义词的意思?
如 typedef enum Boolean{FALSE,TURE}Boolean  是否可以认为是
  Boolean 即 enum Boolean{FLASE,TURE} a;

这样认为对吗?


有段代码是这样的
typedef enum state {FLASE,TURE} State;
typedef State Grid[MAXROW+2][MAXCOL+2];

这两句怎么解?

回复列表 (共5个回复)

沙发

你的看法不太正确。typedef定义的不是近义词而是同义词,也就是说typedef的参数2是类型名而不是变量名
在你给出的范例typedef里
typedef enum Boolean{FALSE,TURE} Boolean;
那么,在后面的变量声明中,Boolean成为了一种新的类型,是取值范围为FALSE,TURE的枚举类型
你的代码段中,第二句是对新定义好的同义词进行了第二次同义词定义,这次定义的是一个二维数组类型
你给出的代码段执行后,如果声明Grid a,那么a是一个[MAXROW+2][MAXCOL+2]的一个二维数组,每个元素是取值范围为FALSE,TURE的枚举类型
明白了吗?

板凳

typedef enum state {FLASE,TURE} State;
typedef State Grid[MAXROW+2][MAXCOL+2];


是说两次同义词定义?
那我这样定义是否可以行的通呢?
typedef enum state {FLASE,TURE}  Grid[MAXROW+2][MAXCOL+2];//也就是说两句和成一句
前面对Grid a;声明过了。

3 楼

原则上讲,这样写没有错,只不过当你需要单独的State类型(也就是枚举类型)的时候又要重写一次了。起别名实际上是一种封装,要考虑逐层封装的问题

4 楼

并非近义词的意思TYPEDEF=TYPE DEFINE即:定义一个类型
TYPE是一个类型,一个数据的描述
例如:"肥头大耳长鼻子"是一个自定义的类型
TYPEDEF Pigtype "肥头大耳长鼻子"
那么Pigtype就是一个描述猪的类型
Pigtype a,b,c;中a,b,c就是一头头猪
TYPEDEF让编程的人可以用自己定义的类型来声明变量

5 楼

强强……你说反了……
typedef起类型别名的用法是
typedef 类型1 类型2,是给类型1起别名为类型2……

我来回复

您尚未登录,请登录后再回复。点此登录或注册