ページ 11

不明な宣言????

Posted: 2010年5月18日(火) 14:25
by タマン
こんにちは。
google等で調べている途中ですが、みなさんの知恵をお借りしたいので質問させていただきます。
現在、とあるオープンソースソフトウェアのコードを調査しているのですが、その中の宣言記述に理解できないものがありました。

---ここから
static int (*p_app_setbuff) (app_t *, int d);
---ここまで

これは一体どのような宣言なのでしょうか。
関数プロトタイプ宣言ではなさそうですし。。。

どなたかお力をいただけると嬉しいです。
宜しくお願い致します。

Re:不明な宣言????

Posted: 2010年5月18日(火) 15:30
by ドラ
p_app_setbuff は「app_t*型とint型の引数をとり、int型の値を返す関数」
を指す関数ポインタです。

記述がゴチャゴチャしていますが、以下のようにすると多少読みやすくなります。

typedef int Func(app_t *, int);
static Func *p_app_setbuff;

Re:不明な宣言????

Posted: 2010年5月19日(水) 00:33
by たかぎ
慣れれば、へたにtypedef名にするより、元の書き方のほうが読みやすくなります。
typedef名にすると、一見して関数へのポインタだとは気付きませんよね。

Re:不明な宣言????

Posted: 2010年5月19日(水) 08:45
by ookami
おはようございます。
皆さんの仰るとおりなので、参考リンクだけ↓
http://www.geocities.jp/ky_webid/c/043.html

Re:不明な宣言????

Posted: 2010年5月19日(水) 12:57
by ドラ
>慣れれば、へたにtypedef名にするより、元の書き方のほうが読みやすくなります。
>typedef名にすると、一見して関数へのポインタだとは気付きませんよね。

そうですね。
関数ポインタに不慣な人の理解を助けるための脳内イメージとして書きました。