static void (* __set_malloc_handler(void (*__f)()))();
私は__set_malloc_handler
は関数ポインタであり、関数ポインタも必要な関数を指していると思います。しかし、私はその声明全体をどのように理解するか分かりません。どのように機能するのですか?この複合宣言を理解する
static void (* __set_malloc_handler(void (*__f)()))();
私は__set_malloc_handler
は関数ポインタであり、関数ポインタも必要な関数を指していると思います。しかし、私はその声明全体をどのように理解するか分かりません。どのように機能するのですか?この複合宣言を理解する
エイリアシングによって理解しやすくなります。
//pointer to function taking no arguments and void return
typedef void(*function_pointer)();
//function taking "function_pointer" and returning "function_pointer"
function_pointer __set_malloc_handler(function_pointer __f);
そのような何かを読むために、私はright-left ruleをお勧めします。それは私がいつも使っているものです。 spiral ruleもありますが、完璧な螺旋を形成していないときは迷惑になります。あなたはおそらくそのような問題はありません。
いずれのページの説明もより詳細ですが、ここではクラッシュコースです。本質的
、これらのシンボルを読み取る:
[...]
= "サイズ...
のアレイ"*
= "ポインタに"(...)
= "...
をとる関数"一致する01がない)
が見つかるまで、右に読んでくださいまだ次にそれに一致する(
が見つかるまで左に読んでください。もう一度読み始めます。右の行の最後に当たったら、左に読み終わる。 識別子__set_malloc_handler
のすぐ右には、かっこで囲まれた(
という意味の機能があります。それから一致するものまですべて)
がパラメータタイプです。私は最初にそれを無視し、後でそれに戻ってくることをお勧めします。ステップバイステップ:パラメータを見て
__set_malloc_handler(...) //function taking ...
(*__set_malloc_handler(...)) //and returning a pointer
(*__set_malloc_handler(...))() //to a function taking no arguments
void (*__set_malloc_handler(...))() //that returns void
、我々が持っている:
(*__f) //pointer
(*__f)() //to function taking no arguments
void (*__f)() //and returning void
ありがとうございました。私は右利きのルールが大好きで、それから多くを学びました。あなたは私に魚を与え、魚の釣り方を教えてくれました。ありがとうございました。 – Taylor
__set_malloc_handler
は「void関数への関数ポインタ」をとり、空に」関数ポインタを返す関数であります関数"。キーワードstatic
は、現在のファイルだけに表示されます。
'__set_malloc_handler'は関数ポインタではなく関数です。それは引数であり、戻り値は関数ポインタです。 –
[Clockwise \ Spiral Rule](http://c-faq.com/decl/spiral.anderson.html) – Mahesh
また、このページは[右下ルール](http:// ieng9。 ucsd.edu/~cs30x/rt_lt.rule.html)。 –