#define문 해석 좀 부탁드립니다.

inviolable의 이미지

리눅스 signal함수 정의 : void(*signal(int signo, void(*func)(int)))(int);

이해 되시죠??? signal함수는 int형을 인수로 가지고 void를 리턴하고 2개의 인수(signo, 신호 처리부 함수 포인터)를 갖는 함수 포인터를 리턴하는 함수입니다(void* 을 리턴하는게 아니라 void를 리턴, *는 함수 포인터라는 의미의 선언임 포인터 선언시 int *p = &a; 이렇게 하듯이).

이 함수 포인터 2번째 인수로(void(*func)(int)인수) SIG_IGN상수나 SIG_DFL상수를 넣을 수 있는데 이 상수의 정의가 다음과 같습니다(헤더 파일에 정의)

#define SIG_DFL(void(*)())0
#define SIG_IGN(void(*)())1

이 두 #define문이 이해가 안갑니다.

보통 #define문처럼 #define a b 이런식으로 되어있지도 않고 해서... 설명 좀 부탁드립니다.

익명 사용자의 이미지

a가 SIG_DFL 이고 b가 (void(*)())0 입니다.

inviolable의 이미지

void형을 리턴하는 인수없는 함수 포인터인건가요?? 근데 이름도 없네요?? 그리고 뒤에 0붙힌건 뭐죠???

raymundo의 이미지

상수 0의 앞에다가 이 0의 타입이 "인자는 없고 리턴타입은 void인 함수의 포인터" 타입이라고 캐스트해 준 거네요.

좋은 하루 되세요!

inviolable의 이미지

캐스팅이라... 답변 감사합니다...^^