メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C++:2008 Rule 6-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 回の反復につき 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 ループ カウンターが -- または ++ で修飾されていないため、!= は非準拠のオペランドとなります。代わりに、オペランド <=<>>= のいずれかを使用してください。

チェック情報

グループ: Statements
カテゴリ: 必要

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.