typedef用法的必要性
在看 cocos2d-x 的源码,发现很多地方有这样的定义(源码在 这里 ):
typedef struct _AsyncStruct
{
std::string filename;
CCObject *target;
SEL_CallFuncO selector;
int handler;
} AsyncStruct;
我的问题是:为什么不直接这样写:
struct AsyncStruct
{
std::string filename;
CCObject *target;
SEL_CallFuncO selector;
int handler;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
C语言规定,变量定义要写
elaborated type
,也就是说,对于struct S{...}
类型的变量定义要写成struct S s;
,为了省掉这个struct
,你就需要用typedef struct S S1
来定义个名叫S1
的elaborated type
,然后你就可以直接用S1
来定义变量了。其实C标准中
S
和S1
可以重名,也就是说你可以写typedef struct S S
,但有一些古老的编译器不支持你这么写,所以一般会换个名字比如typedef struct _S S
。以上所述只针对C语言,C++基本没这个问题(除了friend声明)。
PS. 对于像cocos2d-x这样只能用在新编译器上的C++库,还这么写只能说明作者其实根本没明白为什么。
程序猿大多不想做
重复
的工作, 你比较下下面两段代码:如果是后者写法: 其他人也不用纠结定义一个AsyncStruct变量时要不要加
struct
~