【发布时间】:2014-05-19 18:55:22
【问题描述】:
我正在通过building my own Lisp 学习 C,但我无法弄清楚下一行代码的工作原理:
lenv_add_builtin(e, "def", builtin_def);
我不明白的是:第三个参数怎么调用一个没有参数的函数(lenv*, lval*)。我的猜测是它们是作为typedef structs 构建的,但我不确定。
这是完整的代码
// function pointer
typedef lval*(*lbuiltin)(lenv*, lval*);
lval* builtin_def(lenv* e, lval* a){
return lval_sexpr();
}
void lenv_add_builtins(lenv* e){
lenv_add_builtin(e, "def", builtin_def); // ???
}
int main(int argc, char** argv){
lenv* e = lenv_new(); // constructor
lenv_add_builtins(e)
return 0;
}
【问题讨论】:
-
函数指针:函数没有被调用,只是被传递了。
-
第三个参数不是函数调用;它是一个函数指针。指向的函数稍后会被调用。
-
lenv_add_builtin将创建正确的两个参数。当lenv_add_builtin被调用并被传递给builtin_def时,它只是函数的一个内存位置,像这样传递它并不意味着它会被立即调用。
标签: c function function-pointers