除了与函数指针一起使用之外,是否还有在 C 中对函数进行类型定义的目的?
Is there a purpose of typedefing a function in C, aside from use with a function pointer?
以下代码有效 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 函数用作函数指针类型之外,是否还有 other 用法?请注意,我已经知道替代函数指针类型语法 typedef int (*math_op)(int,int);
创建了一个 函数指针 类型,而我上面的原始语法创建了一个 函数类型 我们稍后会指出。
根据 clang:
error: non-object type 'math_op' (aka 'int (int, int)') is not
assignable: math_op tee = 0;
所以这确实限制了我们的选择。
我能找到的唯一用途是如果你想转发声明一堆具有相同类型签名的函数。这可能不是一个好主意,并且可能会增加代码的 WTF's / line。
math_op tee;
int tee (int x, int y) {
return x + y;
}
以下代码有效 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 函数用作函数指针类型之外,是否还有 other 用法?请注意,我已经知道替代函数指针类型语法 typedef int (*math_op)(int,int);
创建了一个 函数指针 类型,而我上面的原始语法创建了一个 函数类型 我们稍后会指出。
根据 clang:
error: non-object type 'math_op' (aka 'int (int, int)') is not assignable: math_op tee = 0;
所以这确实限制了我们的选择。
我能找到的唯一用途是如果你想转发声明一堆具有相同类型签名的函数。这可能不是一个好主意,并且可能会增加代码的 WTF's / line。
math_op tee;
int tee (int x, int y) {
return x + y;
}