함수포인터 typedef 어렵네요

corone의 이미지

proc 파일시스템과 관련된 struct proc_dir_entry 구조체를 보다가,

typedef int (read_proc_t)(char *page, char **start, off_t off, int count, int *eof, void *data);
typedef int (write_proc_t)(struct file *file, const char __user *buffer, unsigned long count, void *data);
 
struct proc_dir_entry {
...
read_proc_t *read_proc;
write_proc_t *write_proc;
...
};

typedef 부분이 이해가 잘 안가서 찾아봤는데,

typedef int (*func)(int,int);
 
func pfunc;

위와 같이 선언하면

int (*pfunc)(int,int); 

이와 같은 효과가 있다고 하네요

그냥 그러려니 이해하고 외우고 넘어갈려다가
궁금해졌습니다

왜 typedef를 사용하면 저렇게 선언한 효과가 되는 것인가요?
그냥 컴파일러와의 약속인가요?
아니면 논리적으로 설명이 가능한 건가요?

일반적으로
typedef unsigned int u32;
typedef struct str { ... } STR;
이와 같은 선언만 흔히 봐서 이해가 잘 안되네요

karkayan의 이미지

typedef를 빼면 변수 선언 붙이면 타입 선언이라고 이해하시면 편합니다.

unsigned int u32; // u32는 unsigned int 타입의 변수
typedef unsigned int u32; // u32는 unsigned int 타입

int (*func)(int, int); // func는 (int, int)를 받고 int를 리턴하는 함수에 대한 포인터 타입의 변수
typedef int (*func)(int, int); // func는 (int, int)를 받고 int를 리턴하는 함수에 대한 포인터 타입