《python源码剖析》c宏定义的有关问题
《python源码剖析》c宏定义的问题最近刚开始看《python源码剖析》,里面看到Python源码里 object.h 文件里几个
《python源码剖析》c宏定义的问题
最近刚开始看《python源码剖析》,里面看到Python源码里 object.h 文件里几个宏定义:
C/C++ code#define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ struct _object *_ob_prev;#define PyObject_HEAD \ _PyObject_HEAD_EXTRA \ Py_ssize_t ob_refcnt; \ struct _typeobject *ob_type;#define PyObject_HEAD_INIT(type) \ _PyObject_EXTRA_INIT \ 1, type,
第一个宏定义应该是定义了两个相同类型的指针。
第二个宏定义里:
_PyObject_HEAD_EXTRA
Py_ssize_t ob_refcnt;
struct _typeobject *ob_type;
是不是各自等于PyObject_HEA?
第三个宏定义里:
1, type,
为什么这么写呢?
第三个宏定义什么意思呢?
[解决办法]用 1 来初始化 ob_refcnt
type 来初始化 ob_type
[解决办法]#define 就是简单的替换
#define PyObject_HEAD \
_PyObject_HEAD_EXTRA \
Py_ssize_t ob_refcnt; \
struct _typeobject *ob_type;
相当于下面:
struct _object *_ob_next;
struct _object *_ob_prev;
Py_ssize_t ob_refcnt;
struct _typeobject *ob_type;
是不是各自等于PyObject_HEA?不明白你的意思。
[解决办法]找一段使用宏的代码,展开了看。