为了账号安全,请及时绑定邮箱和手机立即绑定

typedef用法的必要性

typedef用法的必要性

一只萌萌小番薯 2019-04-13 08:45:25
在看cocos2d-x的源码,发现很多地方有这样的定义(源码在这里):typedefstruct_AsyncStruct{std::stringfilename;CCObject*target;SEL_CallFuncOselector;inthandler;}AsyncStruct;我的问题是:为什么不直接这样写:structAsyncStruct{std::stringfilename;CCObject*target;SEL_CallFuncOselector;inthandler;}
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

C语言规定,变量定义要写elaboratedtype,也就是说,对于structS{...}类型的变量定义要写成structSs;,为了省掉这个struct,你就需要用typedefstructSS1来定义个名叫S1的elaboratedtype,然后你就可以直接用S1来定义变量了。
其实C标准中S和S1可以重名,也就是说你可以写typedefstructSS,但有一些古老的编译器不支持你这么写,所以一般会换个名字比如typedefstruct_SS。
以上所述只针对C语言,C++基本没这个问题(除了friend声明)。
PS.对于像cocos2d-x这样只能用在新编译器上的C++库,还这么写只能说明作者其实根本没明白为什么。
                            
查看完整回答
反对 回复 2019-04-13
?
MYYA

TA贡献1868条经验 获得超4个赞

程序猿大多不想做重复的工作,你比较下下面两段代码:
structAsyncStruct{
inta;
intb;
};
structAsyncStructi;//定义一个变量
structAsyncStructj;//定义另外一个变量
typedefstruct_AsyncStruct{
inta;
intb;
}AsyncStruct;
AsyncStructi;//定义一个变量(这里不用再写一个**struct**)
AsyncStructj;//定义另外一个变量(这里不用再写一个**struct**)
如果是后者写法:其他人也不用纠结定义一个AsyncStruct变量时要不要加struct~
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信