c++ - typedef用法的必要性
大家讲道理
大家讲道理 2017-04-17 11:28:29
[C++讨论组]

在看 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;
} 
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
巴扎黑

C语言规定,变量定义要写elaborated type,也就是说,对于struct S{...}类型的变量定义要写成struct S s;,为了省掉这个struct,你就需要用typedef struct S S1来定义个名叫S1elaborated type,然后你就可以直接用S1来定义变量了。
其实C标准中SS1可以重名,也就是说你可以写typedef struct S S,但有一些古老的编译器不支持你这么写,所以一般会换个名字比如typedef struct _S S

以上所述只针对C语言,C++基本没这个问题(除了friend声明)。

PS. 对于像cocos2d-x这样只能用在新编译器上的C++库,还这么写只能说明作者其实根本没明白为什么。

黄舟

程序猿大多不想做重复的工作, 你比较下下面两段代码:

struct AsyncStruct {
  int a;
  int b;
};

struct AsyncStruct i; // 定义一个变量
struct AsyncStruct j; // 定义另外一个变量
typedef struct _AsyncStruct {
  int a;
  int b;
}AsyncStruct;

AsyncStruct i; // 定义一个变量 (这里不用再写一个**struct**)
AsyncStruct j; // 定义另外一个变量 (这里不用再写一个**struct**)

如果是后者写法: 其他人也不用纠结定义一个AsyncStruct变量时要不要加struct~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号