关于用typedef定义函数指针类型-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于用typedef定义函数指针类型

a123456678 2016-06-06 09:44:50 1395

今天在《python源码分析》上看到: typedef PyObject (binaryfunc)(PyObject , PyObject );

不太理解为什么用binaryfunc就是一个函数类型指针了。

类比于typedef char A; 不应该是typedef PyObject (PyObject , PyObject ) ( binaryfunc );么

Python
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:27:39

    这是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);  //简化写法
    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题