考虑这两个函数定义:
void foo() { }
void foo(void) { }
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?如果没有,为什么void那里的论点?美学原因?
作为一个染成羊毛的功能性程序员,我发现很难不把我最喜欢的范例卖到我正在使用的任何语言中.在编写一些CI时,我想要讨论我的一个函数,然后传递部分应用的函数.看完之后有没有办法在C里做cur?并注意到http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested-Functions上的警告我提出:
#include <stdio.h>
typedef int (*function) (int);
function g (int a) {
int f (int b) {
return a+b;
}
return f;
}
int f1(function f){
return f(1);}
int main () {
printf ("(g(2))(1)=%d\n",f1(g(2)));
}
Run Code Online (Sandbox Code Playgroud)
哪个按预期运行.但是,我原来的程序与doubles一起工作,所以我想我只是改变了适当的类型,我会没事的:
#include <stdio.h>
typedef double (*function) (double);
function g (double a) {
double f (double b) {
return a+b;
}
return f;
}
double f1(function f){
return f(1);}
int main () {
printf ("(g(2))(1)=%e\n",f1(g(2)));
}
Run Code Online (Sandbox Code Playgroud)
这会产生如下:
bash-3.2$ ./a.out
Segmentation …Run Code Online (Sandbox Code Playgroud)