应用螺旋规则,记住向右、向左、向右、向左等,在退出括号之前总是做括号中的任何事情:
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^
foo是一个...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^------------------------------------^
foo是一个函数...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^
foo是一个将指针指向...的函数
double(*foo(double (*)(double, double[]), double)) (double, ...)
^----------------^
foo是一个带有指向函数的指针的函数...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^^^^^^^^^^^
foo是一个函数,它带有一个指向带有 a 的函数的指针double和一个指向 a 的指针double(“双精度数组”,如果你想对其进行修饰)......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^ ^^^^^^
foo是一个接受 a 的函数(指向接受 a 的函数double的指针和指向double返回 a 的a 的指针double)和 a double...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^
foo是一个函数,它带有一个(指向一个带有 a 的函数double的指针和一个指向double返回 a 的a 的指针double)和一个double返回指向...的指针的 a
double(*foo(double (*)(double, double[]), double)) (double, ...)
^-----------^
foo是一个函数,它带有一个(指向一个带有 a 的函数double的指针和一个指向double返回 a 的a 的指针double)和一个double返回指向函数的指针的 a...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^^^^^^
foo是一个接受 a 的函数(指向接受 a 的函数double的指针和指向double返回 a 的a 的指针double)和 adouble返回指向接受 a 的函数的指针double和任何东西......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^
foo是一个带有 a 的函数(指向带有 a 的函数double的指针和一个指向double返回 a 的a 的指针double)和 adouble返回指向带有 a 的函数的指针double以及任何返回 a的函数double。
将整个东西插入cdecl给我这个(除了它不喜欢省略号参数):
将 foo 声明为函数(指向函数的指针(双精度,双精度数组)返回双精度,双精度)返回指向函数的指针(双精度,...)返回双精度