C언어) typedef 함수 타입 이야기

Lapis0875·2022년 10월 22일
0

c언어

목록 보기
8/21
post-thumbnail

📝연습문제를 풀던 중에...

아래와 같은 문제를 보았어요.

#include <stdio.h>
#include <math.h>
#define PI 3.14159

typedef double dbl;
typedef dbl (*PFDD)(dbl);

int main(void)
{
	PFDD f = sin, g = cos;
    printf("f(%f) = %f\n", PI, f(PI));
    printf("g(%f) = %f\n", PI, g(PI));
    return 0;
}
  • PFDD는 typedef를 사용해 선언한 함수 포인터 형이에요.
    double 형의 별칭인 dbl을 인자로 받아 dbl을 반환하는 함수에 대한 포인터에요.
    문제는 PFDD에 대한 선언을 아래 2줄로 바꾸면 어떻게 되는가? 의 문제였어요.
typedef dbl FDD(dbl);
typedef FDD *PFDD;	

함수 포인터 형에 대한 typedef는 알고 있었는데, * 없이 FDD(dbl) 형태로 선언한 경우는 어떤 자료형으로 선언한 것인가? 싶어서 구글링을 좀 해봤어요.

💡StackOverflow는 신이야!

StackOverflow의 비슷한 사례의 질문글을 찾았어요.

typedef dbl FDD(dbl);
typedef FDD *PFDD;	

위 두 줄의 코드는 기존에 PFDD를 바로 함수 포인터 형으로 선언한 것을 둘로 나눠서,
FDD라는 함수 자체의 자료형을 만든 뒤 PFDD를 FDD의 포인터 형으로 선언한 것으로 이해할 수 있어요.

😎무엇을 배웠는가?

1. 함수 형의 typedef

typedef double double_f(double);

위와 같이 double_f를 typedef로 선언하면, double형 인자 1개를 받아 double형 값을 반환하는 함수 자체에 대한 자료형을 선언할 수 있어요.
이후에, 아래와 같이 사용할 수 있어요.

doulbe sin(double);

double_f *fp = sin;
profile
새내기 대학생 개발자에요 :D

0개의 댓글