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

sky*_*ing 2 c pointers function

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

详细地说,不是void (*fubar)(void)可以有一个类型定义,而是可以将其声明fubarFrob* fubar

jxh*_*jxh 6

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

考虑以下几点typedef

typedef void Frob (void);
Run Code Online (Sandbox Code Playgroud)

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

Frob foo;
Frob *fubar = foo;
void foo (void) { puts(__func__); }
int main (void) { fubar(); }
Run Code Online (Sandbox Code Playgroud)

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