나는 c와 함수 포인터를 실험하고 있었다. 다음 코드는 컴파일러로서 gcc에서 잘 작동합니다.함수 포인터 C와 그 동작
typedef int(* one_var_func)(int);
int Multiply(int x, int y) {
return x * y;
}
one_var_func curry(int(* f)(int, int), int x) {
int curried_f(int y) {
return f(x, y);
}
return (curried_f);
}
int apply(int(* f)(int), int x) {
return f(x);
}
int main() {
int(* p)(int, int);
one_var_func q;
int e;
p = & Multiply;
q = curry(p, 2);
e = apply(* q, 10);
printf("%d \n", e);
return 1;
}
그러나이 작은 수정을하면;
int apply(int (*f)(int) ,int x){
int a;
a=f(x)
return a;
}
프로그램에서 세그먼트 오류가 발생합니다. 나는 이유와 방법을 이해하지 못한다. 설명이 정말 좋을 것입니다.
여기에서하려고하는 것을 완전히 얻지는 못했지만 코드에 * 중첩 된 함수 *가 있으며 C에없는 것입니다. –
@FelixPalmen GCC 확장입니다. 그것이 카레에 정말로 만들어 질 수 있는지 전혀 모른다, 그것은 마술적인 것처럼 보인다. – unwind
어디에서 세분합니까? 디버거가 무엇을 말 했나요? –