鱼C论坛

 找回密码
 立即注册
查看: 3046|回复: 6

typedef

[复制链接]
发表于 2013-8-4 08:59:59 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 dt3tc 于 2013-8-4 09:04 编辑

请问这个代码中的
"typedef PyObject * identifier;"
语句是什么意思,通常来说typedef用来创建类型别名,但这个跟下面的2行代码相似,我想应该不用为同一类型创建多个别名的吧?
#ifndef Py_ASDL_H
#define Py_ASDL_H

typedef PyObject * identifier;
typedef PyObject * string;
typedef PyObject * object;

/* It would be nice if the code generated by asdl_c.py was completely
   independent of Python, but it is a goal the requires too much work
   at this stage.  So, for example, I'll represent identifiers as
   interned Python strings.
如果由asdl_c生成代码,这将很好。py 完全独立于Python,但它是有个在这阶段需要太多工作的目标。因此,举例来说,我会象 interned 的Python 字符串那样表示标识符。*/

/* XXX A sequence should be typed so that its use can be typechecked.
 *XXX 一个序列应该被输入,以便于它的使用可以被类型检查。*/

typedef struct {
    int size;
    void *elements[1];
} asdl_seq;

typedef struct {
    int size;
    int elements[1];
} asdl_int_seq;

asdl_seq *asdl_seq_new(int size, PyArena *arena);
asdl_int_seq *asdl_int_seq_new(int size, PyArena *arena);

#define asdl_seq_GET(S, I) (S)->elements[(I)]
#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
#ifdef Py_DEBUG
#define asdl_seq_SET(S, I, V) { \
        int _asdl_i = (I); \
        assert((S) && _asdl_i < (S)->size); \
        (S)->elements[_asdl_i] = (V); \
}
#else
#define asdl_seq_SET(S, I, V) (S)->elements[I] = (V)
#endif

#endif /* !Py_ASDL_H */
from python-3.1.3\include\asdl.h

最佳答案

查看完整内容

就像170这个数字可以表示人的身高170CM也可以表示人的体重170斤,typedef 就是起到这个作用,让别人更容易明白你定义的变量或者函数表达的是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 09:00:00 | 显示全部楼层
就像170这个数字可以表示人的身高170CM也可以表示人的体重170斤,typedef 就是起到这个作用,让别人更容易明白你定义的变量或者函数表达的是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 09:36:40 | 显示全部楼层
在Python中,所有的东西都是对象,而所有的对象都拥有一些相同的内容,这些内容在PyObject中定义,PyObject是整个Python对象机制的核心。
所以说你说的对,这就是为一个对象起了三个别名,identifier , string , object
由于PyObject是Python的核心,所以他最好不要出现在你的代码中,我记得C++里面也有这样的类型,int 和size_type 吧,都是整形……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 13:08:07 | 显示全部楼层
那些都是指向PyObject对象的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 21:32:05 | 显示全部楼层
学习了。。。。个个都是高手啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-5 12:16:42 | 显示全部楼层
本帖最后由 dt3tc 于 2013-8-5 12:27 编辑

可是为什么要起3个别名而不是只起1个呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-6 12:22:22 | 显示全部楼层
dt3tc 发表于 2013-8-5 12:16
可是为什么要起3个别名而不是只起1个呢

我觉得是怕别名少容易引起代码混乱,就像你使用string,如果你不起这个别名,直接用Pyobject,而恰好代码里也需要用到object,而你没有这个类型,因为你没有其别名,故而还是用成PyObjec,那么在这个代码中就可能引起混乱了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表