以下代码有效C:
typedef int math_op(int, int); // Function type definition
我唯一一次看到声明然后使用的函数类型的情况是我们发出如下语句的情况:
math_op *mOp = add;
add
可能是:
int add(int a, int b)
{
return a + b;
}
鉴于初始声明:math_op mOp;
,以下编译
但是,这里它不是声明为函数指针,而是作为函数本身。但是,我知道没有实际用法,并且发现它很混乱,因为我们似乎宣布一个没有实际定义的函数。
我的问题是,除了将它用作像这样的函数指针类型之外,还有其他用于typedef的函数吗?请注意,我已经知道替代函数指针类型语法typedef int (*math_op)(int,int);
,它创建了一个函数指针类型,而我上面的原始语法创建了一个函数类型,我们后来指向它。
据clang说:
错误:非对象类型'math_op'(又名'int(int,int)')不可赋值:math_op tee = 0;
所以这真的限制了我们的选择。
我能找到的唯一用途是,如果你想转发声明一堆具有相同类型签名的函数。这可能不是一个好主意,可能会增加代码的WTF's / line。
math_op tee;
int tee (int x, int y) {
return x + y;
}