2013-04-16 2 views
1

내 프로그램에는 다음 파일이 있고 특정 기능 정의가있는 머리글과 기능 본문이있는 프로그램이 있습니다. 헤더 I 함수에 대한 포인터들의 어레이를 정의하고했다고포인터 배열을 사용하는 함수 호출

something.h

typedef struct _foo { 
int id; 
int lucky_number; 
} foo; 

typedef void (*pointer_fc)(foo *); 

void first(foo *); 

void second(foo *); 

void third(foo *); 

extern pointer_fc fc_bases[3]; 

something.c 란은

pointer_fc fc_bases[] = {first, second, third}; 

/* body of functions */ 

참고 something.c 프로그램에서 함수는 배열의 모든 요소와 연관됩니다.

특정 순간에 main.c 프로그램에서 3 가지 기능을 모두 호출해야한다고 가정 해 봅시다. 이, 어떻게 내 포인터를 extern 배열을 내 main.c이이 함수를 호출 할 수 있습니다. 구조 foo의 구조 포인터 변수로 다음 f1 선언되면

+1

'fc_bases [n] (params);'('extern' decl에서는'3'이 필요 없습니다.) – WhozCraig

+0

매개 변수가없는 함수에 관한 질문은 문제 자체와 관련이 없으므로 편집했습니다. – SealCuadrado

답변

1

함수 포인터는 호출 할 때 자동으로 참조 해제되므로 간단한 것처럼

foo f; 
fc_bases[0](&f); 
fc_bases[1](&f); 
fc_bases[2](&f); 
+0

두 대답 모두 내 질문을 해결할 수 있지만'main.c' 프로그램은 구조를 이런 식으로 선언했기 때문에 구현하기가 더 쉽습니다. – SealCuadrado

+0

함수 포인터를 사용하여 읽기 연습을 원한다면 [예제] 코드가 있습니다. (http://stackoverflow.com/questions/6635851/real-world-use-of-x-macros/6636596#6636596)는'enum '에 의해 색인 된 배열에 넣고 매크로와 함께 묶는다. 또한 finite-state machine에 대한 구조체의 배열을 가지고 있습니다 (http://stackoverflow.com/questions/1647631/c-state-machine-design/6758622#6758622). –

1

,

foo *f1; 

은 그런 다음 제()을 다음과 같이) (제 기능을 호출 할 수

pointer_fc fc_bases[] = {first, second}; 

(*fc_bases[0])(f1); 

(*fc_bases[1])(f1); 
관련 문제