我正在通过building my own Lisp学习C,我很难理解下一行代码是如何工作的:

lenv_add_builtin(e, "def", builtin_def);

我不明白的是:第三个参数如何调用没有参数的函数我的猜测是它们是按照(lenv*, lval*)构建的,但我不确定。
这是全部代码
// 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(e, "def", builtin_def);

不调用builtin_def。它用作lenv_add_builtin调用中的指针(指向函数)。

10-07 16:03