- ベストアンサー
「void ( *signal(int sig, void (*func)(int)) ) (int)」の (int)
signal関数の書式についてですが、 void ( *signal(int sig, void (*func)(int)) ) (int); 最後に付く(int)は一体何でしょうか? このような関数の書式ははじめて見ました。 UNIX系の何かでしょうか。 回答よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t sighandler); より後半部分のtypedefを置き換えると sighandler_t signal(int signum, void (*sighandler)(int)); つぎに戻り値の部分のtypedefを置き換えると void (*signal(int signum, void (*sighandler)(int)))(int); となります。 ( sighandler_t signal(int signum, void (*sighandler)(int)); の「signal(int signum, void (*sighandler)(int))」をAと置き換えて sighandler_t A; からtypedefを置き換えると void (*A)(int); となり、Aを戻すと void (*signal(int signum, void (*sighandler)(int)))(int); となる。 )
その他の回答 (1)
- reset_cat
- ベストアンサー率68% (94/138)
この関数書式の見方は#1さんが回答してますので、割愛します(ぉ この関数書式を日本語に直すと、 「「戻り値のないint型を引数として持つ関数へのポインタ」を戻り値とした、int型と「戻り値のないint型を引数として持つ関数へのポインタ」を引数にもつ関数」 となり、質問の(int)は「戻り値のないint型を引数として持つ関数へのポインタ」の「int型」の部分になります。
お礼
関数ポインタを戻り値にする場合はこう書くんですね。 わかりやすい回答ありがとうございました!
お礼
戻り値が int の引数1つを持つ関数へのポインタだと! なるほど。難しく考えてました。 回答ありがとうございました!!