함수 포인터 사용시 주의할점에 대해 알아보자.
모든 참조가 그렇듯이, 잘못된 참조는 심각한 오류를 발생시킨다.
배열도 배열의 최대 범위를 넘어가면 문제가 생길수 있듯이..
(문제가 안생기는것 같아도 문제가 생기는게 문제다. 응? ㅋㅋ)
함수 포인터 배열은 위 2가지 문제를 모두 내포한다.
따라서 코드는 간단히 한줄이지만,
이것저것 앞뒤로 안전장치를 만들어줘야 한다.
이렇게 코딩해도 되지만
(*fp_arr[key-0x30])();
값이 -1, 10과 같이 배열의 요소가 아닌 함수를 호출할 경우
null 함수를 호출하게될 불상사(?)를 예방하기 위해서
아래와 같이 여러모로 방어해주는게 좋다.
unsigned int index = (unsigned int)(key - 0x30);
if ((index < 0) && (index > MAX_FUNC_CNT)) { // 0~9사이의 숫자가 맞나?
printf("The number entered must be in the range 0 to 9.\\r\\n");
return;
}
if (fp_arr[index] == NULL) { // 배열에 함수 포인터가 들어있나?
printf("function pointer is null...\\r\\n");
return;
}
(*fp_arr[index])();