문법/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)
 {
 	.........
 }