|
님들께서 저의 질문을 너무나도 무시무시 팍 팍 무시무시 하시는것 같아서 제가 혼자서 열심히 맨땅에 헤딩을 한 결과 아래와 같은 답을 얻었습니다.
#include <Turboc.h>
int f1(int a, double b)
{
return 1;
}
int f2(int a, double b)
{
return 2;
}
int (*SelectFunc(char ch))(int,double)
{
if (ch == 'a') {
return f1;
} else {
return f2;
}
}
void main()
{
int (*fp)(int,double);
fp=SelectFunc('a');
printf("리턴된 값 = %d\n",fp(1,2.3));
}
그런대 충격적인 말을 제가 들었습니다. 다음을 한번 읽어 보세요.
char (*func(char **buf, char *(*strf[9])(void), int *pi))(unsigned short,unsigned (**)(const char *));
문자형 이중 포인터 buf를 첫 번째 인수로 취하고, 인수가 없으며 문자형 포인터를 리턴하는 함수를 포인트 하는 크기 9의 함수 포인터 배열을 두 번째 인수로 취하고, 정수형 포인터를 세 번째 인수로 취하며, 부호없는 16비트 정수를 첫 번째 인수로 취하며, 문자형 상수 지시 포인터를 인수로 취하고 부호없는 정수를 리턴하는 함수의 이중 포인터를 두 번째 인수로 취하며 문자형을 리턴하는 함수를 포인트하는 함수 포인터를 리턴하는 함수 func을 선언한다.
도대체 이게 함수인지 변수인지조차도 잘 분간이 되지 않는 지경이다. 재미로 한 번 보라고 만든 것 뿐이지 이런 함수를 만들 일은 전혀 없다고 장담할 수 있다. 이런 선언문을 읽지 못한다고 해서 고민할 필요는 전혀 없다. 오히려 이런 선언문을 거침없이 읽을 수 있는 사람이 이상한 사람이고 저런 선언문을 만든 사람은 더 이상한 사람이다.
졸지에 제가 이상한 사람이 되었습니다.
그럼
김상면 님이 쓰신 글 :
: 함수가 함수 포인터를 리턴할려면 어떻게 정의 해야 하지요?
: 물론 리턴형을 typedef로 정의한 다음 리턴하면 되지만...
: 원론적인 해답을 원합니다.
:
: 그럼
|