在函数上使用typedef

时间:2015-06-05 02:30:11

标签: c function typedef

以下函数typedef之间有什么区别:

typedef void tbl_opt (void *tbl_item, void *tbl_param);     // 1
typedef void *tbl_opt (void *tbl_item, void *tbl_param);    // 2
typedef void (*tbl_opt) (void *tbl_item, void *tbl_param);  // 3
typedef (void *) (*tbl_opt) (void *tbl_item, void *tbl_param); // 4

通常,我使用第3& 4,但我在一本书中看到了另外两本,我不太清楚。

[更新] 摘要:

似乎在定义类型为1或2的情况下,当使用该类型时,仍然需要声明一个指针变量,并将其初始化为指向另一个实际函数,所以我猜这就是为什么情况3& 4更受欢迎。

2 个答案:

答案 0 :(得分:4)

typedef to:

  1. 获取void指针并返回void
  2. 的函数
  3. 获取void指针并返回void 指针
  4. 的函数
  5. 指针到函数获取void指针并返回void
  6. 一个指针到一个函数获取void指针并返回void 指针
  7. 顺便说一下,请阅读Reading C Type Declarations - 它会改变你的生活。

答案 1 :(得分:3)

3和4是功能指针:

  1. 返回void或no的函数,并带有两个void *参数

    typedef void tbl_opt (void *tbl_item, void *tbl_param);
    
  2. 返回void *并接受两个void *参数的函数

    typedef void *tbl_opt (void *tbl_item, void *tbl_param);  
    
  3. 指向返回void或no的函数的函数指针,并带有两个void *参数

    typedef void (*tbl_opt) (void *tbl_item, void *tbl_param); 
    
  4. 指向返回void *并带有两个void *参数

    的函数的函数指针
    typedef (void *) (*tbl_opt) (void *tbl_item, void *tbl_param);