今天我遇到了这种语法
typedef double (d2d)(double);
cdecl tells me它是一个返回double的函数(而不是指向返回double的函数的指针)。那么让我们看看它是如何工作的:
#include <stdio.h>
typedef double (d2d)(double);
//typedef double (*d2d)(double); // the "usual" way
double twice(double x)
{
return x * 2.0;
}
double apply(d2d f, double x)
{
return f(x);
}
int main()
{
printf("%f\n", apply(twice, 2.0)); // Prints 4.0000
return 0;
}
令人惊讶的是,GCC 4.2.1编译它没有问题。我只是想知道这与typedef
函数指针的“通常”方式之间的细微差别是什么?