メインコンテンツ

MISRA C++:2023 Rule 8.9.1

The built-in relational operators >, >=, < and <= shall not be applied to objects of pointer type, except where they point to elements of the same array

R2024b 以降

説明

ルール定義

The built-in relational operators >, >=, < and <= shall not be applied to objects of pointer type, except where they point to elements of the same array. 1

根拠

配列の要素を指す 2 つのポインターを比較する場合、結果は相対的なポインターの位置になります。ポインターが null または異なる配列の要素を指している場合、比較演算は未定義です。

配列要素を指すポインター間で >>=< または <= を使用する前に、それらのポインターが非 null であり同じ配列を指していることをチェックします。

Polyspace 実装

Polyspace® は、それぞれ異なる配列の要素を指すポインターの間での >>=<、または <= 演算子の使用にフラグを設定します。

ポインター型を使った関係演算子の使用に対する違反を表示している場合、チェッカーはキャストを無視します。

トラブルシューティング

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

すべて展開する

bool foo(){
	int a[10];
	int b[10];
	return (a < b);   // Noncompliant
	
}

この例では、Polyspace が、それぞれ異なる配列の要素である ab の間での比較にフラグを設定します。

チェック情報

グループ: Expressions
カテゴリ: Required

バージョン履歴

R2024b で導入


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.