开发者社区> 问答> 正文

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

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

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

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

展开
收起
a123456678 2016-06-06 09:44:50 2450 0
1 条回答
写回答
取消 提交回答
  • 这是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);  //简化写法
    2019-07-17 19:27:39
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多