幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3924|回复: 11

[通用编程] typedef的用法

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-8-8 15:17:53 | 显示全部楼层 |阅读模式
typedef char * a;
// a is a pointer to a char

typedef a b();
// b is a function that returns
// a pointer to a char

typedef b *c;
// c is a pointer to a function
// that returns a pointer to a char

typedef c d();
// d is a function returning
// a pointer to a function
// that returns a pointer to a char

typedef d *e;
// e is a pointer to a function
// returning a pointer to a
// function that returns a
// pointer to a char

e var[10];
// var is an array of 10 pointers to
// functions returning pointers to
// functions returning pointers to chars

请问这些都是什么意思呢?[s:5]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

6

主题

199

帖子

18

积分

版主

Rank: 7Rank: 7Rank: 7

积分
18
发表于 2007-8-8 16:07:48 | 显示全部楼层
typedef A B就是給A一個別名叫B,僅此而已,不要胡思亂想,不要想得太過複雜了。
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-8-8 16:16:30 | 显示全部楼层
但也应该理解下嘛 [s:5]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-8-8 17:53:20 | 显示全部楼层
其實這兒想說function也可當成data type啦

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-8-8 20:03:46 | 显示全部楼层
c++里面的不爽处之一.
这个东西很会误导人.
看字面typedef,新学的都会以为这意思就是定义新类型,
其实上它的实质意思是alias(别名)(也就是ultranet说的那个意思)
这么多年了,一直都没有改过来,国际标准化组织也真是敢于明知故犯. [s:5]
え~え~お!!!
回复 支持 反对

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
发表于 2007-8-9 00:30:46 | 显示全部楼层
typedef是为了让代码显得更加有意义,或者是把很长的类型简写。

比如这种:
stdext::hash_set<Renderable*>
用typedef就可以简化:
typedef stdext::hash_set<Renderable*> RenderSet;

以后用RenderSet来代替前面的类型即可,并且是带有类型检查的。特别是定义很长很长很长的函数指针,都可以通过typedef来给它赋予更清晰易读的名字。

有的时候根据编译环境的不同,同一个类型名可能指向不同的基本定义。譬如UNICODE相关的字符串定义TCHAR。在编译为UNICODE的情况下,TCHAR代表wchar_t,否则代表char。如果没有typedef,那么就得使用#define,而#define是没有类型检查的。

#ifdef  _UNICODE
typedef   wchar_t   TCHAR;
#else
typedef   char   TCHAR;
#endif

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-8-12 08:54:38 | 显示全部楼层
[s:5] 好像有点难理解
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-8-12 09:00:44 | 显示全部楼层
简单去理解 就和使用
int a = obj.subobj1.subobj2.subobj3.u->com.i.data.l;
差不多(这个是运行期,而TYPEDEF是编译期),没有什么必要性,看起来更加自然些

(不过也有必要性的地方,比如模板的类似递归用法……,这里略)
比如: 假设一个小型字符串,可以固定不会超过32个字符就应该用
typedef char string[32];
如果有误导性那么还是不要用了,偶现在主要用纯C或者扩展C,所以对很多惯用法也不熟悉……
Style-C
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-8-12 12:30:05 | 显示全部楼层
不是 typedef char[32] string; 嗎?

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-8-12 12:58:42 | 显示全部楼层
*( * (  char* pFun( ) ) ( ) )
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-4 03:55 , Processed in 0.024763 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表