C中的函数是否有“类型名称”?

时间:2019-05-16 04:04:38

标签: c function pointers

在C语言中可以定义一个函数指针,但是指针指向的内容是否有“类型名”?

要详细说明,可以用一个类型定义代替void (*fubar)(void),以便可以将fubar声明为Frob* fubar

3 个答案:

答案 0 :(得分:5)

没有像int那样的函数指针的标准类型名。此外,没有关键字为它们的标记命名空间,就像struct一样。相反,如果要按名称引用函数原型或函数指针,则应该使用typedef

请考虑以下typedef

typedef void Frob (void);

如果没有typedef关键字,则该声明将针对名为Frob的函数的原型。对于typedef,名称Frob现在是与该原型匹配的函数的类型别名。因此,可以像这样使用它:

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

通常,typedef以此方式工作,它可以将变量声明(无初始值设定项)转换为类型别名。

答案 1 :(得分:1)

typedef void (*fubar_p)(void);

void typedef (*fubar_p)(void);

typedef void (fubar)(void);

void typedef (fubar)(void);

那你就可以做

fubar_p fun_p;

fubar *fun;

在两种情况下,funfun_p的含义相同,指向函数的指针不带参数且不返回任何值。

答案 2 :(得分:0)

只需对它进行类型定义。

typedef void(*Frob)(void);

void f(void)
{
    // your code goes here
}

int main()
{
    Frob fubar = f;
    fubar();
    return 0;
}