• ベストアンサー

「void ( *signal(int sig, void (*func)(int)) ) (int)」の (int)

signal関数の書式についてですが、   void ( *signal(int sig, void (*func)(int)) ) (int); 最後に付く(int)は一体何でしょうか? このような関数の書式ははじめて見ました。 UNIX系の何かでしょうか。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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); となる。 )

noname#113783
質問者

お礼

戻り値が int の引数1つを持つ関数へのポインタだと! なるほど。難しく考えてました。 回答ありがとうございました!!

その他の回答 (1)

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

この関数書式の見方は#1さんが回答してますので、割愛します(ぉ この関数書式を日本語に直すと、 「「戻り値のないint型を引数として持つ関数へのポインタ」を戻り値とした、int型と「戻り値のないint型を引数として持つ関数へのポインタ」を引数にもつ関数」 となり、質問の(int)は「戻り値のないint型を引数として持つ関数へのポインタ」の「int型」の部分になります。

noname#113783
質問者

お礼

関数ポインタを戻り値にする場合はこう書くんですね。 わかりやすい回答ありがとうございました!

関連するQ&A