アプリ版:「スタンプのみでお礼する」機能のリリースについて

signal関数の書式についてですが、

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

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

A 回答 (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);
となる。
)
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/15 16:53

この関数書式の見方は#1さんが回答してますので、割愛します(ぉ


この関数書式を日本語に直すと、
「「戻り値のないint型を引数として持つ関数へのポインタ」を戻り値とした、int型と「戻り値のないint型を引数として持つ関数へのポインタ」を引数にもつ関数」
となり、質問の(int)は「戻り値のないint型を引数として持つ関数へのポインタ」の「int型」の部分になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/15 16:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!