✅ 목표 (Goal)

함수 포인터 사용시 주의할점에 대해 알아보자.

🥕 당근이의 한마디

모든 참조가 그렇듯이, 잘못된 참조는 심각한 오류를 발생시킨다.

배열도 배열의 최대 범위를 넘어가면 문제가 생길수 있듯이..

(문제가 안생기는것 같아도 문제가 생기는게 문제다. 응? ㅋㅋ)

함수 포인터 배열은 위 2가지 문제를 모두 내포한다.

따라서 코드는 간단히 한줄이지만,

이것저것 앞뒤로 안전장치를 만들어줘야 한다.

✅ 주의사항#1: null 체크를 해주자

이렇게 코딩해도 되지만

(*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])();