VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3163|回复: 56

[交流] typedef的三个用途

  [复制链接]
79_avatar_middle
在线会员 发表于 2016-1-7 20:06:03 | 显示全部楼层 |阅读模式
用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
char* pa, pb;  // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,  
// 和一个字符变量;
以下则可行:
typedef char* PCHAR;  // 一般用大写
PCHAR pa, pb;        // 可行,同时声明了两个指向字符变量的指针
虽然:
char *pa, *pb;
也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。

用途二:
用在旧的C代码中(具体多旧没有查),帮助struct。以前的代码中,声明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,比较省事,尤其在大量使用的时候

或许,在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。

用途三:
用typedef来定义与平台无关的类型。
比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;  
在不支持 long double 的平台二上,改为:
typedef double REAL;  
在连 double 都不支持的平台三上,改为:
typedef float REAL;  
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。
标准库就广泛使用了这个技巧,比如size_t。
另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏来得稳健(虽然用宏有时也可以完成以上的用途)。还有其他什么用途 请大家多多建议

评分

参与人数 2驿站币 +3 热心值 +3 收起 理由
11_avatar_small 饮水机 + 1 + 1
65_avatar_small 编程者 + 2 + 2 继续发一些高质量的帖子

查看全部评分





上一篇:帮我看下,如何才能关闭主窗口,第二个还在,或着说窗口独立
下一篇:return min(t1,t2); // 如果不加min 结果返回t2的值
17_avatar_middle
在线会员 发表于 2016-1-8 09:10:50 | 显示全部楼层
共同学习了
回复 支持 反对

使用道具 举报

17_avatar_middle
在线会员 发表于 2016-1-8 09:13:23 | 显示全部楼层
我能想到的也就这三种用法了。楼主的总结很到位。谢谢。
回复 支持 反对

使用道具 举报

08_avatar_middle
在线会员 发表于 2016-1-8 10:54:31 | 显示全部楼层
typedef的三个用途
回复 支持 反对

使用道具 举报

06_avatar_middle
在线会员 发表于 2016-1-8 11:17:43 | 显示全部楼层
看看那三种用途
回复 支持 反对

使用道具 举报

65_avatar_middle
在线会员 发表于 2016-1-8 11:59:32 | 显示全部楼层
typedef的三个用途
回复 支持 反对

使用道具 举报

72_avatar_middle
在线会员 发表于 2016-1-8 12:24:46 | 显示全部楼层
看看是什么情况
回复 支持 反对

使用道具 举报

51_avatar_middle
在线会员 发表于 2016-1-8 16:13:33 | 显示全部楼层
谢谢分享,学习了
回复 支持 反对

使用道具 举报

65_avatar_middle
在线会员 发表于 2016-1-8 16:33:15 | 显示全部楼层
看一看了 呵呵
回复 支持 反对

使用道具 举报

16_avatar_middle
在线会员 发表于 2016-1-9 10:28:28 | 显示全部楼层
共同学习
回复 支持 反对

使用道具 举报

50_avatar_middle
在线会员 发表于 2016-1-11 00:34:10 | 显示全部楼层
谢谢分享啊啊
回复 支持 反对

使用道具 举报

95_avatar_middle
在线会员 发表于 2016-1-11 02:35:25 | 显示全部楼层
共同学习了
回复 支持 反对

使用道具 举报

46_avatar_middle
在线会员 发表于 2016-1-11 06:42:18 | 显示全部楼层
谢谢分享...
回复 支持 反对

使用道具 举报

88_avatar_middle
在线会员 发表于 2016-1-11 09:47:53 | 显示全部楼层
11111111111
回复 支持 反对

使用道具 举报

53_avatar_middle
在线会员 发表于 2016-1-11 11:33:05 | 显示全部楼层
回帖是一种美德
回复 支持 反对

使用道具 举报

24_avatar_middle
在线会员 发表于 2016-1-11 13:51:15 | 显示全部楼层
来看看经验
回复 支持 反对

使用道具 举报

44_avatar_middle
online_vip 发表于 2016-1-11 14:30:30 | 显示全部楼层
倒是要看看有哪些用途
回复 支持 反对

使用道具 举报

17_avatar_middle
online_vip 发表于 2016-1-11 17:00:27 | 显示全部楼层
ddddddddddddddddddddd
回复 支持 反对

使用道具 举报

75_avatar_middle
online_vip 发表于 2016-1-12 08:20:48 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

25_avatar_middle
在线会员 发表于 2016-1-12 10:06:37 | 显示全部楼层
typedef的三个用途typedef的三个用途
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-1-16 15:04

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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