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いかないからです)。

おすすめ記事