以下に示すコード行に出くわしたのは、voidを返し、voidポインタを受け取る関数ポインタへのキャストかもしれないと思うのですが、正しいですか?
(void (*)(void *))SGENT_1_calc
はい、正しいです。私はそれが非常に読みにくいと思うので、ポイントされる関数の署名を宣言することをお勧めします:
typedef void sigrout_t(void*);
また、rout_t
で終わるタイプが関数シグネチャのタイプであるコーディング規約があります。 _t
はサフィックス 予約済み Posixであるため、別の名前を付けることもできます。
後者の場合、おそらく次のように呼び出すためにキャストしています
((sigrout_t*) SGENT_1_calc) (someptr);
はい、関数は次のようになります
void func(void*);
しかし、何にもキャストしないと役に立たないため、ステートメントにはターゲットがありません。だからそれは
func = (void (*)(void *))SGENT_1_calc;
はい、proto void funcname(void *)を使用して関数に割り当てることができる関数ポインタです。ここでは、SGENT_1_calcをfuncnameに直接割り当てることができます。
はい、それはあなたが述べたようにキャストです。