代码之家  ›  专栏  ›  技术社区  ›  skyking

C中的函数有“类型名”吗?

  •  0
  • skyking  · 技术社区  · 7 年前

    void (*fubar)(void) 可以有一个类型定义,这样就可以声明 fubar Frob* fubar ?

    1 回复  |  直到 7 年前
        1
  •  6
  •   jxh    7 年前

    函数指针没有标准的类型名,就像 int struct . 相反,您应该使用 typedef

    考虑以下事项 类型定义

    typedef void Frob (void);
    

    类型定义 Frob . 具有 类型定义 ,名字 嬉戏 现在是与该原型匹配的函数的类型别名。因此,它可以这样使用:

    Frob foo;
    Frob *fubar = foo;
    void foo (void) { puts(__func__); }
    int main (void) { fubar(); }
    

    通过这种方式,它可以将变量声明(无初始值设定项)转换为类型别名。

        2
  •  1
  •   alinsoar    7 年前
    typedef void (*fubar_p)(void);
    

    void typedef (*fubar_p)(void);
    

    typedef void (fubar)(void);
    

    void typedef (fubar)(void);
    

    fubar_p fun_p;
    

    fubar *fun;
    

    在这两种情况下, fun fun_p 具有相同的含义,指向不带参数且不返回任何内容的函数的指针。

        3
  •  0
  •   selbie    7 年前

    typedef void(*Frob)(void);
    
    void f(void)
    {
        // your code goes here
    }
    
    int main()
    {
        Frob fubar = f;
        fubar();
        return 0;
    }