メインコンテンツ

AUTOSAR C++14 Rule M6-5-2

If loop-counter is not modified by -- or ++, then, within condition, the loop-counter shall only be used as an operand to <=, <, > or >=

説明

ルール定義

If loop-counter is not modified by -- or ++, then, within condition, the loop-counter shall only be used as an operand to <=, <, > or >=.

根拠

ループ カウンターが 1 回の反復につき 1 より大きい値でインクリメントまたはデクリメントする場合は、ループ終了条件での == または != の使用を避けてください。目視検査では、このようなループ終了条件が満たされるかどうかが明確ではありません。

たとえば、ctr+=2 のように、ループ カウンター ctr が 1 回の反復につき 1 より大きい値でインクリメントする場合、終了条件が ctr == someVal であると、カウンターが値 someVal をスキップして、終了しないループになる可能性があります。

終了しないループは、開発者の混乱を招いたり、予期しない値になったりする可能性があります。

Polyspace 実装

次に該当する場合は常に、Polyspace® がこの欠陥を報告します。

  • ループ カウンターが -- または ++ で修飾されていない

  • ループ条件に <=<> または >= が含まれていない

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include <cstdint>

uint32_t row, col;

void example()
{
    for (row = 0; row <= 10; row++) {                 //Compliant
        for (col = 100; col != 10; col -= 4) {        //Noncompliant
            //...
        }
    }
    for (row = 0; row != 10; row++) {		    //Compliant
        //...
    }
}

2 番目の for ループ カウンターが -- または ++ で修飾されていないため、!= は非準拠のオペランドとなります。代わりに、オペランド <=<>>= のいずれかを使用してください。

チェック情報

グループ: ステートメント
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入