web-dev-qa-db-ja.com

関数ポインターにキャストしますか?

以下に示すコード行に出くわしたのは、voidを返し、voidポインタを受け取る関数ポインタへのキャストかもしれないと思うのですが、正しいですか?

(void (*)(void *))SGENT_1_calc
24
Toby

はい、正しいです。私はそれが非常に読みにくいと思うので、ポイントされる関数の署名を宣言することをお勧めします:

 typedef void sigrout_t(void*);

また、rout_tで終わるタイプが関数シグネチャのタイプであるコーディング規約があります。 _tはサフィックス 予約済み Posixであるため、別の名前を付けることもできます。

後者の場合、おそらく次のように呼び出すためにキャストしています

 ((sigrout_t*) SGENT_1_calc) (someptr);
34

はい、関数は次のようになります

void func(void*);

しかし、何にもキャストしないと役に立たないため、ステートメントにはターゲットがありません。だからそれは

func = (void (*)(void *))SGENT_1_calc;
5
bash.d

はい、proto void funcname(void *)を使用して関数に割り当てることができる関数ポインタです。ここでは、SGENT_1_calcをfuncnameに直接割り当てることができます。

0
user2243395

はい、それはあなたが述べたようにキャストです。

0
Tony The Lion