社区
C++ 语言
帖子详情
万恶的typedef!!
whoseking
2007-03-19 09:39:57
刚学C的时候,觉得typedef这东西真不错!声明一个struct可以不带struct写程序,多方便!现在用VC写程序,发现里面typedef的类型漫天飞!一跟踪发现原来是char*等等!发现微软的程序员非常喜欢typedef,一个结构可以typedef出N个类型,实在是让人无法忍受!
...全文
683
20
打赏
收藏
万恶的typedef!!
刚学C的时候,觉得typedef这东西真不错!声明一个struct可以不带struct写程序,多方便!现在用VC写程序,发现里面typedef的类型漫天飞!一跟踪发现原来是char*等等!发现微软的程序员非常喜欢typedef,一个结构可以typedef出N个类型,实在是让人无法忍受!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Hemee
2007-03-20
打赏
举报
回复
楼上几位解释得很好
kane12
2007-03-20
打赏
举报
回复
学习,提高
Jim_King_2000
2007-03-20
打赏
举报
回复
typedef是为了增加可移植性的.很多的库都使用自定义的数据类型,不使用ansi数据类型.这样即使库做了修改,用户的源代码也不用修改,只需要重新编译即可.
北极猩猩
2007-03-20
打赏
举报
回复
Windows下绝大多数的typedef都是为了跨平台考虑的。就像是taodm说的,之所以typedef就是说明你不该知道它的真正类型。
比如,一个handle在Win16下是16位的,Win32下是32位的,Win64下可能又是64位的。如果使用基本类型的话,那么所有的程序在不同平台下都要去该这些数据类型。难道不把人累死
还有,即使基本类型相同,数据可能代表的东西是完全不同的。如果你只看到long,你会知道他是一个Window handle,DC handle还是Event?这些数据在未来的平台上可能拥有不同的基本类型,到时候你的程序不是只有崩溃?
sinall
2007-03-20
打赏
举报
回复
呵呵,typedef太必要了,理由如下:
1)typedef在跨平台的程序总是重要的,楼上有人说REAL,这个REAL可以是float,也可以是double,从而增加灵活性。
2)typedef在和模板技术结合的时候(比如STL),可以简化程序,并且在如容器发生改变的情况下(比如vector改为deque的时候),仅需改变较少代码即可。
taodm
2007-03-20
打赏
举报
回复
应该换了思路,“想知道它的基本类型”其实是个错误。
晨星
2007-03-20
打赏
举报
回复
还要,基于以上几位所解释的,一个直接的结论,也是应该注意的,就是别写出那些对实际类型有太多依赖的代码。
比如,千万不要在某系统上跟踪到HANDLE原来是unsigned short,于是就干粹在代码中需要HANDLE的地方直接写unsigned short。
晨星
2007-03-20
打赏
举报
回复
北极星,打错了。- -b
晨星
2007-03-20
打赏
举报
回复
嗯。除了taodm和北京星解释的。
typedef在模板技术中也很重要。
我是潘东东
2007-03-20
打赏
举报
回复
不说了 跟上面几位想法一样
feelyousky
2007-03-20
打赏
举报
回复
去移植两个程序就知道他的好处了
calebgch
2007-03-20
打赏
举报
回复
万恶淫为首。
xlbdan
2007-03-20
打赏
举报
回复
typedef可以使有些复杂的复合类型看起来更简洁易懂.
举个例子,一个有N个元素的数组,其每个元素都是指向返回值为int,参数为int的函数的指针,
不用typedef的话,写出来是: int (*p[N])(int);
若用typedef的话,写出来是: typedef int (*PP)(int);
PP p[N];
ff5dq4
2007-03-19
打赏
举报
回复
同感哈 有什么办法直接就能知道其基本类型么?
kimryo
2007-03-19
打赏
举报
回复
自己写一些c++系统
kimryo
2007-03-19
打赏
举报
回复
等你开始自机械系统的时候,你就知道为什么他们会这么做了~
blackmurder
2007-03-19
打赏
举报
回复
既然用了typedef那么就肯定有它的道理,也许楼主随着进一步深入学习VC,会体会到它的道理
Cnwanglin
2007-03-19
打赏
举报
回复
别人写的习惯了,
不习惯自己可以再写个系统
你写成你名字都没人说,只是以后维护起来就郁闷了,哈哈
whoseking
2007-03-19
打赏
举报
回复
别名太多实在不爽,还是喜欢用真名!看看GDI+里面多了一个REAL型,跟踪一看原来是float型,我就日了,至于吗!
cphua
2007-03-19
打赏
举报
回复
typedef 主要还是用来其别名的,容易记,习惯就好了~
《C深度解析》第7、8章 结构体/共用体/枚举,杂项(自动类型转换、大小端序等)
第7章: 1. 结构体 结构体定义、访问、传参,结构体对齐(offsetof宏... 枚举 第8章: 自动类型转换、大小端序、
typedef
、编译器优化、extern "C"、程序调试、变参函数、do{}while(0)、内嵌汇编、调试版与发行版、断言
【summary】mat 【
万恶
溢出!!】
教训:int*int除了考虑最后答案溢出还要考虑中间溢出呀!(唔。。虽然最后全部换成了LL) #include ...
typedef
long long LL;
typedef
long double LD; void read(LL& x) { char c = getchar();x
第一次作业(
万恶
的数据结构)
完成了数据结构的作业。。。#include<stdio.h> #include<stdlib.h&...
typedef
struct Node { int data; struct Node *next; }Node, *ptr_Node;
typedef
enum Status {...
万恶
的柯怡(可持久化lazy模板)
万恶
的柯怡 题目链接 题意就是一个在线的区间修改区间求和。但是依数据范围看,如果我们想用线段树解决这个问题就得用动态开点的线段树,那么这里涉及到区间修改,需要使用 lazylazylazy 标记,但是如果是动态开点,...
牛客15903
万恶
的柯怡
typedef
long long ll;
typedef
pair,int> pii;
typedef
pair,ll> pll; ll read(ll x=0) { ll c, f(1); for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f; for(;isdigit(c);c=getchar())x=x*10+c-0x30; ...
C++ 语言
64,685
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章