• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 クロージャマクロの読み方)

C言語 クロージャマクロの読み方

このQ&Aのポイント
  • # C言語 クロージャマクロの読み方
  • C言語におけるクロージャマクロの読み方について詳しい方に教えていただきたいです。
  • 特に、APPLY_COUNTERのAPPLYへの値渡しを理解する方法について教えてください。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.3

#1です。 関数counter_functionは int counter_function (Counter * c, int a) こんな感じで定義されているのだから,この関数へのポインタを宣言するときは int (*counter_function)(Counter * c, int a) こんな感じで宣言しますよね。 で,これにキャストするときは int (*)(Counter *, int) をつけてやればよい,と言うのがCの文法です。

OK_WAVE
質問者

お礼

なるほど、仕様ですか 「関数ポインタ キャスト」で検索してヒットしました ありがとうございます

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

マクロを展開してみれば良いのでは?

OK_WAVE
質問者

補足

(*)に関して無知です

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

たとえば APPLY_COUNTER (c1, 3) というのは (((int (*)(Counter *, int))((c1).func)))(&(c1), 3) つまり ((int (*)(Counter *, int))c1.func)(&c1, 3) ということです。 c1.funcつまりcounter_functionを(int (*)(Counter *, int))にキャストしていますが,実質的には意味がありません。 引数は&c1と3ですので,結局 counter_function(&c1, 3) と同じです。

OK_WAVE
質問者

お礼

(*)の意味を考えて検索したり参考書引っ張り出したり 訳わからない方に考え込んでました アスタリスクは暗黙に展開されるのでしょうか ((co).func))これ削ったらすっきりしました ありがとうございます

OK_WAVE
質問者

補足

早速の回答ありがとうございます 結果はそうなんだろうと思います どこでキャストしてるのでしょう (*)これが後方参照のキャッストですか

関連するQ&A