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

[通用编程] typedef的用法

[复制链接]
发表于 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]
发表于 2007-8-8 16:07:48 | 显示全部楼层
typedef A B就是給A一個別名叫B,僅此而已,不要胡思亂想,不要想得太過複雜了。
 楼主| 发表于 2007-8-8 16:16:30 | 显示全部楼层
但也应该理解下嘛 [s:5]
发表于 2007-8-8 17:53:20 | 显示全部楼层
其實這兒想說function也可當成data type啦
发表于 2007-8-8 20:03:46 | 显示全部楼层
c++里面的不爽处之一.
这个东西很会误导人.
看字面typedef,新学的都会以为这意思就是定义新类型,
其实上它的实质意思是alias(别名)(也就是ultranet说的那个意思)
这么多年了,一直都没有改过来,国际标准化组织也真是敢于明知故犯. [s:5]
发表于 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
 楼主| 发表于 2007-8-12 08:54:38 | 显示全部楼层
[s:5] 好像有点难理解
发表于 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,所以对很多惯用法也不熟悉……
发表于 2007-8-12 12:30:05 | 显示全部楼层
不是 typedef char[32] string; 嗎?
发表于 2007-8-12 12:58:42 | 显示全部楼层
*( * (  char* pFun( ) ) ( ) )
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-11-6 19:21 , Processed in 0.010927 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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