문법/C
[C언어] typedef를 사용한 함수 포인터 선언.
khoneybee
2021. 11. 4. 21:16
이번시간에는 typedef를 사용한 함수 포인터 선언과 유의사항에 대해 알아보겠다.
typedef를 사용하여 함수 포인터를 선언하는 방법은 두가지가 있다.
1. typedef 자료형 (*FuncPtr)(자료형 변수, 자료형 변수......)
2. typedef 자료형 FuncPtr(자료형 변수, 자료형 변수......)
첫번째 방식으로 함수 포인터를 선언 했을 때에는 앞에 *(에스터리스크)가 붙어있기 때문에 함수 내부에서 함수를 선언할 때
*를 붙이지 않고 선언을 해도 된다.
//구조체 내부에서 포인터 함수를 선언할 때 1
typedef int (*FuncPtr)(int d1, int d2);
struct Str
{
int a;
FuncPtr comp;
}
두번째 방식으로 함수 포인터를 선언 했을 때에는 *가 없기 떄문에 함수 내부에서 함수를 선언할 때 *를 붙여야 한다.
//구조체 내부에서 포인터 함수를 선언할 때 2
typedef int FuncPtr(int d1, int d2);
struct Str
{
int a;
FuncPtr* comp;
}
하지만 여기서 예외사항 하나가 있다.
매개변수로써 함수 포인터가 쓰일 때에는 1번 방식과 2번 방식 모두 *를 쓰지 않는다.
이것은 예외 상황이기 때문에 생각하지 말고 그냥 외우도록 하자.
//매개변수로써 함수 포인터가 쓰일 때 1
typedef int (*FuncPtr)(int d1, int d2);
void Function(int a, FuncPtr b)
{
.........
}
//매개변수로써 함수 포인터가 쓰일 때 2
typedef int FuncPtr(int d1, int d2);
void Function(int a, FuncPtr b)
{
.........
}