今天在《python源码分析》上看到: typedef PyObject (binaryfunc)(PyObject , PyObject );
不太理解为什么用binaryfunc就是一个函数类型指针了。
类比于typedef char A; 不应该是typedef PyObject (PyObject , PyObject ) ( binaryfunc );么
这是C标准规定的写法,不是用来理解的。
但是可以教你一个小窍门用来记忆:
a) 定义一个函数
PyObject * FunctionName(PyObject *, PyObject *);
b) 上句前面加上typedef
typedef PyObject * ( * FunctionName)(PyObject *, PyObject *);
这样写的话, b 中定义的函数指针类型FunctionName,就是 a 中函数FunctionName的类型。
从这个规则可以推断,这种语法可能是早期C编译器用来简化实现设计的。
c) 实际上 b 的写法可以进一步化简,去掉星号和括号:
typedef PyObject * FunctionName(PyObject *, PyObject *);
这个规则跟使用函数指针调用函数时一样,两种写法都是对的:
typedef int func (int, int);
int add(int a, int b) { return a + b; }
...
func x = add;
(*x)(2, 3); //标准写法
x(2, 3); //简化写法
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。