2011-10-10 5 views
2

메신저에서 매개 변수가있는 콜백을 사용하는 방법을 알아 내려고합니다. 다음은 작동하지 않습니다. 그것을 성취하는 가장 좋은 방법은 무엇입니까?매개 변수가있는 콜백

#include <stdio.h> 

void caller(int (*cc)(int a)) { 
    cc(a); 
} 

int blub(int a) { 
    printf("%i", a); 
    return 1; 
} 

int main(int argc, char** argv) 
{ 
    caller(blub(5)); 
    return 1; 
} 

답변

6

콜백 함수 자체를 전달하지 않고 함수를 전달하기 전에 호출을 수행하고 있습니다. 이것을 시도하십시오 :

#include <stdio.h> 

void caller(int (*cc)(int),int a) { 
    cc(a); 
} 

int blub(int a) { 
    printf("%i", a); 
    return 1; 
} 

int main(int argc, char** argv) 
{ 
    caller(blub, 1000); 
    return 1; 
} 
1

caller 함수 포인터를 기대 (콜백 함수에 대한 인수를 전달) 그리고 당신은 그것을 정수를 제공하고 있습니다. 방금 caller(blub)이 필요합니다.

또한 int (*cc)(int a) 구문이 잘못되었습니다.

void caller(int (*cc)(int), int a) { 
    cc(a); 
} 

int main(int argc, char** argv) 
{ 
    caller(blub, 5); 
    return 1; 
} 

코드에서 작동 할 가능성이 가장 높습니다.

0

인수를 함수 포인터로 카레 변환 할 수 없습니다. 사용해보기 :

#include <stdio.h> 

void caller(int (*cc)(int a), int a) { 
    cc(a); 
} 

int blub(int a) { 
    printf("%i", a); 
    return 1; 
} 

int main(int argc, char** argv) { 
    caller(&blub, 5); 
    return 1; 
}