【发布时间】:2018-08-23 17:41:11
【问题描述】:
我打算以阶乘为例来解释 C 中递归定理的标准证明。所以我有
#include <stdio.h>
typedef unsigned Nat;
typedef Nat Func();
Nat G(Nat n, Func f){
if(n) return n * f(n-1, f);
else return 1;
}
int main(void){
printf("%u", G(5, G));
return 0;
}
它在我能找到的每个编译器上都有效(打印 120),但困扰我的是我将一个指向函数的指针传递给一个没有完全指定类型的参数(它是一个返回的函数Nat,但未指定参数类型)。按照标准可以吗(任何标准,但最好是不弃用未指定参数类型的标准,所以我猜是 C89:)?
当然,我更希望能够完全指定 Func,但这似乎是不可能的(很明显,
typedef Nat Func(Nat, Func);
不起作用)。
【问题讨论】:
标签: function-pointers function-prototypes ansi-c