メインコンテンツ

AUTOSAR C++14 Rule M5-0-2

Limited dependence should be placed on C++ operator precedence rules in expressions.

説明

ルール定義

Limited dependence should be placed on C++ operator precedence rules in expressions.

根拠

小かっこを使用して評価の順序を明確に示します。

演算子の優先順位によっては、次の問題が発生することがあります。

  • コード レビュー担当者がコードをレビューする場合に、意図されている評価順がすぐにはわからない。

  • 評価の結果が予想と一致しない可能性がある。次に例を示します。

    • 演算 *p++ では、デリファレンスされた値がインクリメントされるとの予想が可能。しかし、ポインター p はデリファレンスの前にインクリメントされている。

    • 演算 (x == y | z) では、xy | z と比較されるとの予想が可能。しかし、== 演算は | 演算の前に行われている。

トラブルシューティング

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

すべて展開する

#include <cstdio>

void showbits(unsigned int x) {
    for(int i = (sizeof(int) * 8) - 1; i >= 0; i--) {
       (x & 1u << i) ? putchar('1') : putchar('0'); // Noncompliant 
    }
    printf("\n");
}

この例で、チェッカーは演算 x & 1u << i にフラグを設定します。このステートメントが、<< 演算は & 演算の前に実行されるという演算子の優先順位のルールに依存しているからです。これが意図した順序の場合、この演算は x & (1u << i) と書き換えられます。

チェック情報

グループ:
カテゴリ: Advisory、Partially automated

バージョン履歴

R2019a で導入