メインコンテンツ

AUTOSAR C++14 Rule A13-6-1

Digit sequences separators ' shall only be used as follows:(1) for decimal, every 3 digits, (2) for hexadecimal, every 2 digits, (3) for binary, every 4 digits

R2021a 以降

説明

ルール定義

Digit sequences separators ' shall only be used as follows:(1) for decimal, every 3 digits, (2) for hexadecimal, every 2 digits, (3) for binary, every 4 digits.

根拠

C++14 以降、数字列内の数字を区切るための区切り記号 ' を使用して可読性を高められるようになりました。コード全体の一貫性を保つために、数字列区切り記号を入力する場合は次の規則に従ってください。

  • 10 進値では、3'000'000 のように、右から 3 桁ごとに区切り記号を配置します。

  • 16 進値では、0xF'FF'0F のように、右から 2 桁ごとに区切り記号を配置します。

  • バイナリ値では、0b1001'0011'0100 のように、右から 4 桁ごとに区切り記号を配置します。

コード全体の一貫性が保たれていれば、開発者やコード レビュー担当者は、より簡単にコードを確認でき、数字列区切り記号から値の桁数を推定できるようになります。

Polyspace 実装

このチェッカーは、AUTOSAR C++14 ルールの仕様に従っています。

整数の場合、チェッカーは右からチェックを開始します。たとえば、チェッカーは値 45'30'00 を違反として検出します。これは、数字列区切り記号が想定に反し、右から 3 桁後にではなく 2 桁後に出現しているためです。

浮動小数点数の場合は、チェッカーは小数点からチェックを開始して外側に進みます。チェッカーは以下のようにチェックします。

  • 小数点より前の部分は右から。

  • 小数点より後の部分は左から。

仮数と指数を伴う浮動小数点数の場合は、整数と同じルールが指数に適用されます。たとえば、10 進表記では、チェッカーが右から指数をチェックして、数字列区切り記号が 3 桁ではなく 2 桁ごとに配置されている場合などに違反を検出します。

トラブルシューティング

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

すべて展開する

#include <cstdint>

std::uint32_t largeNum = 3'0000'0000; //Noncompliant
std::uint32_t smallerNum = 3'000'000;  //Compliant
std::uint32_t evenSmallerNum = 3'00'00; //Noncompliant

std::uint32_t largeHexNum = 0xFF'FF'FF'FF; //Compliant
std::uint32_t smallerHexNum = 0xFFF'FFF; //Noncompliant

この例では、数字列区切り記号が想定された規則に従っている場合に、その区切り記号の配置は準拠しています。

  • 10 進数では、右から 3 桁ごとに区切り記号が配置されます。

  • 16 進数では、右から 2 桁ごとに区切り記号が配置されます。

#include <cstdint>

float PI = 3.1'415'926'53; //Noncompliant
float pi = 3.141'592'653; //Compliant;

float one_LB_to_KG = 0.45'359'237; //Noncompliant
float one_lb_to_kg = 0.453'592'37; //Compliant

この例では、同じ浮動小数点数が 2 つの異なる変数に代入されますが、数字列区切り記号の配置が異なります。区切り記号が想定された規則に従っている場合に、その配置は準拠しています。

  • 小数点より後の桁では、左から 3 桁ごとに区切り記号が配置されます。

  • 小数点より前の桁では、右から 3 桁ごとに区切り記号が配置されます。

    浮動小数点数の場合は、小数点より前に数字列区切り記号が必要になることはほとんどありません。たとえば、浮動小数点数を正規化された形式で保存すると、仮数の小数点より前には 1 桁しかありません。

チェック情報

グループ: オーバーロード
カテゴリ: Required、Automated

バージョン履歴

R2021a で導入