2017-06-04 2 views
0
static void (* __set_malloc_handler(void (*__f)()))(); 

私は__set_malloc_handlerは関数ポインタであり、関数ポインタも必要な関数を指していると思います。しかし、私はその声明全体をどのように理解するか分かりません。どのように機能するのですか?この複合宣言を理解する

+0

'__set_malloc_handler'は関数ポインタではなく関数です。それは引数であり、戻り値は関数ポインタです。 –

+3

[Clockwise \ Spiral Rule](http://c-faq.com/decl/spiral.anderson.html) – Mahesh

+0

また、このページは[右下ルール](http:// ieng9。 ucsd.edu/~cs30x/rt_lt.rule.html)。 –

答えて

1

エイリアシングによって理解しやすくなります。

//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もありますが、完璧な螺旋を形成していないときは迷惑になります。あなたはおそらくそのような問題はありません。

いずれのページの説明もより詳細ですが、ここではクラッシュコースです。本質的

、これらのシンボルを読み取る:

  • [...] = "サイズ...のアレイ"
    1. * = "ポインタに"
    2. (...) = "...をとる関数"一致する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 
      
    +0

    ありがとうございました。私は右利きのルールが大好きで、それから多くを学びました。あなたは私に魚を与え、魚の釣り方を教えてくれました。ありがとうございました。 – Taylor

    1

    __set_malloc_handlerは「void関数への関数ポインタ」をとり、空に」関数ポインタを返す関数であります関数"。キーワードstaticは、現在のファイルだけに表示されます。

    関連する問題