メインコンテンツ

AUTOSAR C++14 Rule M2-13-2

Octal constants (other than zero) and octal escape sequences (other than "\0" ) shall not be used

説明

ルール定義

8 進数の定数 (ゼロ以外) および 8 進数のエスケープ シーケンス ("\0" 以外) を使用してはなりません。

根拠

8 進数の定数は先頭の 0 で表されます。開発者またはコード レビュー担当者は 8 進数の定数を、先頭に冗長な 0 をもつ 10 進数の定数と勘違いする可能性があります。

\ で始まる 8 進数のエスケープ シーケンスも混乱を招くことがあります。\ の後ろの数字列に誤って 8 または 9 を導入すると、エスケープ シーケンスが分割されて新しい数字が導入されます。開発者またはコード レビュー担当者はこの問題を無視して、引き続きエスケープ シーケンスを 1 つの数字として扱う可能性があります。

Polyspace 実装

ルール チェッカーは以下の場合に違反を報告します。

  • 先頭がゼロで始まる定数。

  • 直後にゼロが続く、\ で始まるエスケープ シーケンス。

トラブルシューティング

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

すべて展開する

void func(void) {
  int busData[6];
  
  busData[0] = 100;
  busData[1] = 108;
  busData[2] = 052;      //Noncompliant
  busData[3] = 071;      //Noncompliant
  busData[4] = '\109';   //Noncompliant
  busData[5] = '\100';   //Noncompliant

}

チェッカーは、すべての 8 進数の定数 (ゼロ以外) とすべての 8 進数のエスケープ シーケンス (\0 以外) にフラグを設定します。

この例では以下のようになります。

  • 8 進数のエスケープ シーケンスに数字の 9 が含まれています。これは 8 進数ではありません。このエスケープ シーケンスには処理系定義の動作があります。

  • 8 進数のエスケープ シーケンス \100 は数字の 64 を表しますが、ルール チェッカーはこの使用法を禁止しています。

チェック情報

グループ: 構文規則
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入

すべて展開する