Re: typedef と関数ポインタ
fj.comp.lang.cの記事<bq1ppd$pve$1@news511.nifty.com>で
kounoike@mbh.nifty.comさんは書きました。
> しょうもない事を聞くようですが、上のは、
> (int (*)())(*)()
> と
> typedef int (*fnptr)();
> typedef fnptr (*fnptr_fn)();
> は、同じことである。と言った内容なのでしょうか。それとも、両者は何の関係もな
> く、単なるtypedefの用法を説明したものなのでしょうか。
こーのさんがいいたいのは
(int (*)())(*)()
というキャストを使うよりは
typedef int (*fnptr)();
typedef fnptr (*fnptr_fn)();
と宣言しておいて
(fnptr_fn)
を使うのであれば「まだ、なんか許せる」ということで
しょう。この2つのキャストは同じです。
(int (*)())(*)()
によってキャストされる先の型は
[1] intを返す関数へのポインタ → (int (*)())
[2] …[1]…を返す関数へのポインタ → (…[1]…)(*)()
になります。typedefを使うことで、(1)と書くところで
はかわりにfnptrと書け、(2)と書くところではfnptr_fn
と書けるわけですね。
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
ohta@sdg.mdd.ricoh.co.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735