C#


CSHARP.STRUCT.BW.OR : Bitwise OR on Boolean (C#)

要旨

There is a suspicious use of | instead of ||.

C# has a bitwise and a logical-AND operation on Booleans, that is, & and &&. Similarly, C# has a bitwise and a logical-OR operation | and ||. The difference is that the logical operations have a short circuit semantics, that is, if the evaluation of the left-hand side is enough to determine the outcome of the operation, then the right-hand side is not evaluated; the bitwise operations, instead, evaluate both sides, always, which might be incorrect is most cases, or at least inefficient.

プロパティ

クラス名 Bitwise OR on Boolean (C#)
日本語クラス名 Bitwise OR on Boolean (C#)
クラス分類 信頼性 (reliability)
ニーモニック CSHARP.STRUCT.BW.OR
カテゴリー
CWE CWE:768 Incorrect Short Circuit Evaluation
対応言語 C# で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Bitwise OR on Boolean (C#)"

using System;

namespace DocumentationExamples
{

    
    public class ShortCircuit
    {
        public static void Main(string[] args)
        {
            if (args.Length == 0 | IsOption(args[0])) // "Bitwise OR on Boolean (C#)" warning issued here
                Console.WriteLine("option expected");
            else
            {
                Console.WriteLine("ok");
            }
        }
        private static bool IsOption(string s)
        {
            return s.StartsWith("option");
        }
    }
}

In this example, the programmer should replace | with ||.

解決法

Use the logical (short-circuit) version of the operators on Booleans.

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。