在看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++库,还这么写只能说明作者其实根本没明白为什么。
MYYA
TA贡献1868条经验 获得超4个赞
程序猿大多不想做重复的工作,你比较下下面两段代码:structAsyncStruct{inta;intb;};structAsyncStructi;//定义一个变量structAsyncStructj;//定义另外一个变量typedefstruct_AsyncStruct{inta;intb;}AsyncStruct;AsyncStructi;//定义一个变量(这里不用再写一个**struct**)AsyncStructj;//定义另外一个变量(这里不用再写一个**struct**)如果是后者写法:其他人也不用纠结定义一个AsyncStruct变量时要不要加struct~
添加回答
举报
0/150
提交
取消