このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C:2012 Rule 18.2
Subtraction between pointers shall only be applied to pointers that address elements of the same array
説明
ルール定義
Subtraction between pointers shall only be applied to pointers that address elements of the same array 1 .
根拠
このルールは、pointer_expression1 - pointer_expression2
形式の式に適用されます。pointer_expression1
および pointer_expression2
が次のいずれかである場合、動作は未定義になります。
同じ配列の要素を指していない。
配列の終端を超えた要素を指していない。
Polyspace 実装
null ポインターまたは別の配列内の要素を指しているポインターを減算すると、Polyspace® はこのルールに対する違反を報告します。
現行の解析で、減算演算で使用されるポインターのいずれかが Polyspace に対して未知である場合、このルールの違反は報告されません。たとえば次のコードでは、Polyspace は arg_ptr
および temp
の基になるオブジェクトを判断できません。
extern int *getPtr(); void foo(int *arg_ptr) { int diff, diff2; int c_str[50]; int *temp = getPtr(); int diff = c_str - arg_ptr; //No violation int diff2 = c_str - tmp; //No violation }
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
グループ: ポインターと配列 |
カテゴリ: 必要 |
AGC カテゴリ: 必要 |
バージョン履歴
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.