/* 각 A,B,C,D 기능을 하는 함수가 있다고 하면 */
void Func_A(void);
void Func_B(void);
void Func_C(void);
void Func_D(void);
/* 포인터 배열로 함수포인터를 선언할 수 있음. */
/* 단, 동적할당이 안되어 불편함 */
void (*Func_Pointer[4])(void);
void main(void)
{
int i = 0;
/* 대충 이런식으로 주소를 지정해줄 수 있는데 비효율적임 */
Func_Pointer[0] = Func_A();
Func_Pointer[1] = Func_B();
Func_Pointer[2] = Func_C();
Func_Pointer[3] = Func_D();
/* 호출만 시켜줌 */
for(i = 0; i < 4 ; i++)
{
(*Func_Pointer[i])();
}
}
함수 포인터를 배열로 선언해서 쓰려고 하니까, 동적할당도 안되고 비효율적인 것 같아서 구조체 배열로 쓰는게 좋을 거 같음.
/* 구조체 내에 함수 포인터를 선언함 */
struct VOID_FUNC_VOID_POINTERS
{
void (*Func)(void);
};
void Func_A(void);
void Func_B(void);
void Func_C(void);
void Func_D(void);
/* 이 함수포인터 내용을 포함한 구조체를 배열로 선언해서 각 인덱스별로 각 기능에 대한 함수주소를 지정함 */\
struct VOID_FUNC_VOID_POINTERS Structs_Func_Pointer[]
{
Func_A,
Func_B,
Func_C,
Func_D,
};
void main(void)
{
unsigned char i = 0;
/* 일단 호출구문만 넣음 */
for (i = 0 ; i < 4 ; i++)
{
(*Structs_Func_Pointer[i])();
}
}