メインコンテンツ

MISRA C++:2008 Rule 2-13-2

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

説明

ルール定義

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

根拠

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 を表しますが、ルール チェッカーはこの使用法を禁止しています。

チェック情報

グループ: Lexical Conventions
カテゴリ: 必要

バージョン履歴

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.