こんにちは。
google等で調べている途中ですが、みなさんの知恵をお借りしたいので質問させていただきます。
現在、とあるオープンソースソフトウェアのコードを調査しているのですが、その中の宣言記述に理解できないものがありました。
---ここから
static int (*p_app_setbuff) (app_t *, int d);
---ここまで
これは一体どのような宣言なのでしょうか。
関数プロトタイプ宣言ではなさそうですし。。。
どなたかお力をいただけると嬉しいです。
宜しくお願い致します。
不明な宣言????
Re:不明な宣言????
p_app_setbuff は「app_t*型とint型の引数をとり、int型の値を返す関数」
を指す関数ポインタです。
記述がゴチャゴチャしていますが、以下のようにすると多少読みやすくなります。
typedef int Func(app_t *, int);
static Func *p_app_setbuff;
を指す関数ポインタです。
記述がゴチャゴチャしていますが、以下のようにすると多少読みやすくなります。
typedef int Func(app_t *, int);
static Func *p_app_setbuff;
Re:不明な宣言????
慣れれば、へたにtypedef名にするより、元の書き方のほうが読みやすくなります。
typedef名にすると、一見して関数へのポインタだとは気付きませんよね。
typedef名にすると、一見して関数へのポインタだとは気付きませんよね。
Re:不明な宣言????
>慣れれば、へたにtypedef名にするより、元の書き方のほうが読みやすくなります。
>typedef名にすると、一見して関数へのポインタだとは気付きませんよね。
そうですね。
関数ポインタに不慣な人の理解を助けるための脳内イメージとして書きました。
>typedef名にすると、一見して関数へのポインタだとは気付きませんよね。
そうですね。
関数ポインタに不慣な人の理解を助けるための脳内イメージとして書きました。