メインコンテンツ

CWE Rule 710

Improper Adherence to Coding Standards

R2024a 以降

説明

ルールの説明

The product does not follow certain coding rules for development, which can lead to resultant weaknesses or increase the severity of the associated vulnerabilities.

Polyspace 実装

ルール チェッカーは、"同一データでのビットごとの演算と算術演算です" をチェックします。

すべて展開する

問題

この問題は、ビット演算と算術演算が同じ式で実行された場合に発生します。

リスク

ビット演算と算術演算が混在していても、コンパイルは "行われます"。ただし、このような混在した演算の結果には整数型のサイズが影響します。たとえば、特定のビット数の左シフト (<<) に相当する算術演算は、シフトする変数内のビット数に依存するため、そのデータ型の内部表現に依存します。ビット演算と算術演算が混在している場合は、同じ式で別々のターゲットに関する別々の結果が生成される可能性があります。

また、混在した演算は可読性と保守性も低下させます。

修正方法

ビット演算と算術演算を分離するか、各ステートメントにつき 1 種類の演算のみを使用します。

例 — シフトと加算
unsigned int bitwisearithmix()
{
    unsigned int var = 50;
    var += (var << 2) + 1; //Noncompliant
    return var;
}

この例では、変数 var にビット演算と算術演算が行われています。var は 2 (ビット) シフトされ、それ自体に 1 が加算 (算術演算) されます。

修正 - 算術演算に限定

この式を算術演算のみに削減できます。var + (var << 2)var * 5 と等価です。

unsigned int bitwisearithmix()
{
    unsigned int var = 50;
    var = var * 5 +1;
    return var;
}

チェック情報

カテゴリ: その他

バージョン履歴

R2024a で導入