exponenta event banner

Правило AUTOSAR C++ 14 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