0
저는 building my own Lisp에 의해 C를 배우고 있습니다. 내 함수 포인터 builtin_def
이 선언되지 않았다면 컴파일러는 왜 불평하지 않습니까? 그리고 어떻게 수행합니까? 컴파일러는 매개 변수로 전달되는 변수의 유형을 알고 있습니까? 나는이 같은 builtin_def
의 선언이없는컴파일러는 어떻게 함수 포인터의 변수 유형을 알고 있습니까
// 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); // builtin_def not declared
}
int main(int argc, char** argv){
lenv* e = lenv_new(); // constructor
lenv_add_builtins(e)
return 0;
}
주의 사항 :
lenv*(*builtin_def)(lenv*, lval*);
위의 세 줄을'builtin_def '로 선언하십시오. (그리고 당신은 동시에 그것을 정의 할 수도 있습니다.) – Mat
예,하지만 그것은 함수이고 포인터가 아닌 것입니다. – Pompeyo
함수의 맨 이름은 * 함수 포인터입니다. 'builtin_def'는 함수 포인터입니다. 반면에'builtin_def (e, a)'는 함수 호출입니다. –