typedef用法的必要性

在看cocos2d-x的源码,发现很多地方有这样的定义(源码在这里):
typedefstruct_AsyncStruct
{
std::stringfilename;
CCObject*target;
SEL_CallFuncOselector;
inthandler;
}AsyncStruct;
我的问题是:为什么不直接这样写:
structAsyncStruct
{
std::stringfilename;
CCObject*target;
SEL_CallFuncOselector;
inthandler;
}
一只萌萌小番薯
浏览 269回答 2
2回答

冉冉说

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

MYYA

程序猿大多不想做重复的工作,你比较下下面两段代码:structAsyncStruct{inta;intb;};structAsyncStructi;//定义一个变量structAsyncStructj;//定义另外一个变量typedefstruct_AsyncStruct{inta;intb;}AsyncStruct;AsyncStructi;//定义一个变量(这里不用再写一个**struct**)AsyncStructj;//定义另外一个变量(这里不用再写一个**struct**)如果是后者写法:其他人也不用纠结定义一个AsyncStruct变量时要不要加struct~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript