应用螺旋规则,记住向右、向左、向右、向左等,在退出括号之前总是做括号中的任何事情:
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 声明为函数(指向函数的指针(双精度,双精度数组)返回双精度,双精度)返回指向函数的指针(双精度,...)返回双精度