应用spiral rule,记住要向右、向左、向右、向左等,在退出之前始终执行括号中的任何操作:
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 是一个函数,它带有一个指向带有 double 的函数的指针和一个指向 double 的指针(“双精度数组”,如果你想对其进行修饰)...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^ ^^^^^^
foo 是一个函数,它采用一个(指向采用 double 的函数的指针和指向返回 double 的 double 的指针)和 double...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^
foo 是一个函数,它带有一个(指向带有 double 的函数的指针和一个指向返回 double 的指针)和一个 double,它返回一个指向...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^-----------^
foo 是一个函数,它带有一个(指向带有 double 的函数的指针和指向返回 double 的指针)和 double 返回指向函数的指针。 .
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^^^^^^
foo 是一个函数,它带有一个(指向带有 double 的函数的指针和一个指向返回 double 的指针)和一个 double,它返回一个指向带有 a 的函数的指针double 和任何东西......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^
foo 是一个函数,它采用一个(指向采用 double 的函数的指针和一个指向返回 double 的指针)和一个 double,它返回一个指向采用 a 的函数的指针double 以及任何返回 double 的内容。
将整个东西插入cdecl 会给我这个(除了它不喜欢省略号参数):
将 foo 声明为函数(指向函数的指针(双精度,双精度数组)返回双精度,双精度)返回指向函数的指针(双精度,...)返回双精度