AUTOSAR C++14 Rule A13-6-1

Разделители последовательностей цифр 'должны использоваться только следующим образом: (1) для десятичных чисел, каждые 3 цифры, (2) для шестнадцатеричных знаков, каждые 2 цифры, (3) для двоичных знаков, каждые 4 цифры

Описание

Определение правила

Разделители последовательностей цифр 'должны использоваться только следующим образом: (1) для десятичных чисел, каждые 3 цифры, (2) для шестнадцатеричных знаков, каждые 2 цифры, (3) для двоичных знаков, каждые 4 цифры.

Объяснение

Начиная с C++ 14, можно ввести диафрагму ' разделение цифр в последовательности цифр для улучшения удобочитаемости. Для обеспечения согласованности по вашему коду следуйте этому соглашению при вводе диафрагмы последовательности цифр:

  • В десятичных значениях, начиная с правой, поместите диафрагму после каждые три цифры, например 3'000'000.

  • В шестнадцатеричных значениях, начиная с справа, поместите диафрагму после каждые две цифры, например 0xF'FF'0F.

  • В двоичных значениях, начиная с справа, поместите диафрагму после каждые четыре цифры, например 0b1001'0011'0100.

Если вы согласованы по всему коду, разработчик или рецензент кода могут легче следовать за вашим кодом и, возможно, оценить порядок величины значения из диафрагм последовательности цифр.

Реализация Polyspace

Эта проверка выполняется в соответствии со спецификациями правила AUTOSAR C++ 14.

Для целых чекер начинает проверять справа. Например, проверка вызывает нарушение значения 45'30'00, потому что, начиная справа, диафрагма последовательности цифр появляется после двух цифр вместо ожидаемых трех.

Для чисел с плавающей запятой чекер начинает проверку с десятичного знака и протекает наружу. Чекер проверяет:

  • Деталь перед десятичным числом, начинающаяся справа.

  • Деталь после десятичного знака, начинающаяся слева.

Для чисел с плавающей запятой с мантиссой и экспонентом к экспоненте применяется то же правило, что и целые числа. Например, в десятичном обозначении чекер проверяет экспоненты, начиная справа, и поднимает нарушение, если диафрагмы последовательности цифр размещены, например, после каждые две цифры вместо трех.

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#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

В этом примере размещение диафрагм последовательности цифр соответствует, если диафрагмы следуют ожидаемому соглашению:

  • В десятичных числах, начиная с правой, диафрагма помещается после каждые три цифры.

  • В шестнадцатеричных числах, начиная с справа, диафрагма помещается после каждые две цифры.

#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

В этом примере одно и то же число с плавающей запятой присваивается двум разным переменным, но размещение диафрагм последовательности цифр отличается. Размещение соответствует требованиям, если диафрагмы соответствуют ожидаемому соглашению:

  • Для цифр после десятичного числа, начиная с левого, диафрагма помещается после каждые три цифры.

  • Для цифр перед десятичным числом, начиная с правой, диафрагма помещается после каждые три цифры.

    Для чисел с плавающей запятой необходимость в диафрагме последовательности цифр перед десятичным числом обычно является редким вхождением. Например, если вы храните число с плавающей запятой в нормированной форме, мантисса имеет только одну цифру перед десятичным числом.

Проверяйте информацию

Группа: Перегрузка
Категория: Необходимый, Автоматизированный
Введенный в R2021a