10

私は次のようなコードを持っています

A = B|C|D|E;

警告をスローする「|のオペランドの算術を括弧で囲むことをお勧めします」

式には演算子の優先度の高い並列処理が必要であると予想して、次の方法を試しました。

A=(B|C)|(D|E);

もう1つ:

A=(((B|C)|D)|E);

それでも同じ警告が続きます。

これを解決するのを手伝ってください。

ありがとう、スジャサ

B、C、Dは列挙型で、Eは整数です。

4

2 に答える 2

14

式には、実際には単純なBではない、または実際には単純なCではない算術演算子などがあります。コンパイラは、読者が意図した内容を記述したことを確認できるように、いずれかの式を括弧で囲むことを提案しています。括弧を付けない場合、誰もが優先順位が何であるかを正確に覚えている必要があり、あなたがそれを書いたときに覚えているかどうかを理解する必要があります。

これを試してください:(B)|(C)|(D)|(E)。

于 2010-06-04T06:55:33.337 に答える
2

これは奇妙な警告です。異なる演算子を使用していて、それらの演算子の優先順位が異なる場合にのみ、優先順位に注意を払う必要があります。たとえば、算術では、乗算は加算よりも優先されます。

ただし、この場合、1 つの演算子のみを複数回使用しています。ビットごとの or は連想的かつ可換 ( (A | B) | C == A | (B | C)and A | B == B | A) であるため、警告の理由は実際にはありません。

于 2010-06-04T07:13:53.843 に答える