Menu

W0498「`()' で結合を明確に〜」が出ない

Anonymous
2012-09-28
2012-10-15
  • Anonymous

    Anonymous - 2012-09-28

    AdLint 2.4.0についてご報告です.
    警告 W0498 が出て欲しいところで検知されないケースがあります.

    static void cast(void);
    static void cast(void)
    {
      const int dw = 1;
      const int dh = 1;
      int w  = 1;
      int h  = 1;
    
      h = dh * w / dw;
      w = (dw * h / dh);
      return;
    }
    

    以上のコードで9行目に下が警告されますが,次の10行目にはされません.10行目もこの警告の対象になると思うのですが.

    W0498,二項演算子 + - * / のうち、同じ優先順位の異なる演算子が共に使われています。`()' で結合を明確にすることを勧めます。
    
     
    • Yutaka Yanoh

      Yutaka Yanoh - 2012-10-15

      ご報告ありがとうございます。

      たしかに、ご指摘の通り式全体を () でグループ化した場合に警告しなくなるのは不具合でした。

      本件の W0498 と、類似した W0488 / W0489 / W0490 / W0495 / W0496 / W0497 / W0499 / W0500 / W0501 / W0502 についても本件の不具合を修正しました。

      お手数おかけしますが、AdLint 2.4.10 にアップデートしていただき、再度ご確認をお願いいたします。


      余談ですが、「() でグループ化して演算子の結合を明示」コードチェックは、少しお節介なほど警告を出力してしまうかもしれませんが、MISRA-C などのチェックリストを参考に検討した結果、このような仕様になっております。

       
  • Anonymous

    Anonymous - 2012-10-15

    ご対応ありがとうございます.
    AdLint 2.4.10 で,期待通りに両方の行が検知されることを確認しました.


    この警告を潰していっても,Lisp ほど () まみれになることは稀でしょう.少し多く警告が出ても問題ないかと思います.

    余談ついでに,MISRA-C にある int 型や double 型などを使わないというルールについては,AdLint ではどう対応されるのでしょう.代わりに定義域のチェックでカバーされていくのでしょうか.一律に適用してしまうと,お節介な場面の多いルールだと感じますが.

     

Anonymous
Anonymous

Add attachments
Cancel