
私は「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を受け入れ、何も返さない関数へのポインタ
int
anを受け入れ、何も返さない関数へのポインタを返します。
追加の括弧は、返された関数ポインタに対応します。
詳細な説明があります。スタックオーバーフロー時。残念ながらcdecl.orgこのステートメントは何の効果もありません(うまくcdecl
いかないからです)。