Linux에서 신호 시스템 호출 프로토타입을 분해하는 방법은 무엇입니까?

Linux에서 신호 시스템 호출 프로토타입을 분해하는 방법은 무엇입니까?

나는 "Linux 프로그래밍 인터페이스"를 읽고 있었는데 거기서 아래와 같은 신호 시스템 호출 프로토타입을 발견했습니다.

#include <signal.h>
void ( *signal(int sig, void (*handler)(int)) ) (int);

여기서 신호는 무엇입니까? 함수 포인터입니까, 아니면 간단한 함수입니까?

끝에 (int)를 넣은 이유를 알고 싶습니다.

void 반환 유형이 있음에도 불구하고 signal()이 SIGBXXX의 마지막 구성을 반환하는 이유는 무엇입니까?

답변1

읽는 방법

void ( *signal(int sig, void (*handler)(int)) ) (int);

signal매개변수로 받아들이는 함수를 선언한다는 것입니다.

  • 하나int
  • int그리고 그 자체로 a를 받아들이고 아무것도 반환하지 않는 함수에 대한 포인터

intan을 받아들이고 아무것도 반환하지 않는 함수에 대한 포인터를 반환합니다 .

추가 괄호는 반환된 함수 포인터에 해당합니다.

자세한 설명이 나와있어요스택 오버플로 시. 안타깝게도cdecl.org이 명령문은 아무런 효과가 없습니다( cdecl작동하지 않기 때문입니다).

관련 정보