2016-11-02 8 views
-1

私はこのifの文を見ましたが、その動作がどういうものなのか、何と比較されているのでしょうか? &&または||の不足はありますか? parensは私を混乱させています。何と比較されているものC strange if文の構文

if ((list->func)((list->head)->dataPointer, newOb) < 0) { 
+2

これは冗長なカッコを持ち、 'if(list-> func(list-> head-> dataPointer、newOb)<0)'と書かれている可能性があります。 –

+0

同じことも 'result = list-> func(list-> head-> dataPointer、newOb);の後に 'if(result <0)'が続きます。多くの場合、複雑な式を複数の行に分割して読みやすくすることは良い考えです。 – Lundin

答えて

5

? parensは私を混乱させています。

if()の間の部分の結果は、すべてのif文のように、0と比較されます。

& &や||の不足はありますか?

私には何も表示されません& &または||

父親が私を混乱させています。 (list->func)((list->head)->dataPointer, newOb)は何

は(必ずしもこの順序で)です:

  • list->func
  • 2つの引数(list->head)->dataPointernewObを渡す(list->head)->dataPointer
  • コールlist->funcを評価し評価します。それはif()の間で何があるかだから

この結果は、その後、0と比較されます。

+0

ありがとう、parensは読みにくいです。すべてが理にかなっています。 – TooTiredToDrink

0

さて、最初の括弧のセットは、funcというメンバを持つオブジェクトへのポインタであることを示しています。 funcは関数です。だから(list-> func)は関数呼び出しです。この関数は明らかに2つの引数をとります。渡される最初の引数は(list-> head) - > dataPointerです。 (list-> head)は、listというポインタが指しているオブジェクトがheadというメンバを持っていることを示します。 headはポインタでもあり、dataPointerというメンバを持つオブジェクトを指しています。関数に渡される2番目の引数(list-> func)はnewObです。関数(list-> func)は明らかに何らかの種類の数値、おそらくintを返しています。
コードは if(list-> func(list-> head-> dataPointer、newOb)<) のように書き直すことができます。

+1

'(list-> func)'は関数呼び出しではありません。関数呼び出しはその直後に現れる '()'演算子で示されます。 –

+0

まあ、技術的には、式全体(list-> func)(stuff、more stuff)は関数呼び出しですが、list-> funcが関数であり、呼び出されているという大きなポイントから離れません。 – critmass