我被building my own Lisp學習C和我有麻煩搞清楚的下一行代碼是如何工作的: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;
}
函數指針:該函數沒有被調用,但剛剛通過。 – nneonneo
第三個參數不是函數調用;它是一個函數指針。指向的函數將在稍後調用。 –
'lenv_add_builtin'會創建適當的兩個參數。當'lenv_add_builtin'被調用並且將'builtin_def'只傳遞給函數的內存位置時,傳入它就不會立即調用它。 –