# V6061. The used constant value is represented by an octal form.

Анализатор выявил подозрительное использование константы в восьмеричной системе счисления. Анализатор предупреждает о наличии восьмеричных констант, если рядом нет других восьмеричных констант. Такие "одиночные" восьмеричные константы часто являются ошибкой.

Использование констант в восьмеричной системе счисления само по себе не является ошибкой. Эта система удобна при работе с битами и используется в коде, взаимодействующем с сетью или внешними устройствами. Однако средний программист редко использует эту систему счисления и поэтому может написать перед числом 0, забыв, что это превращает значение в восьмеричное.

Рассмотрим ошибочный пример:

    void compute(int red, int blue, int green)
    {
      int color = 2220 * red +
                  7067 * blue +
                  0713 * green;

      // ...
    }

Рассматривая подобный код непросто заметить ошибку, но она есть. Ошибка в том, что последняя константа "0713" задана в восьмеричной системе счисления и имеет значение вовсе не 713, а 459. Исправленный вариант кода:

    void compute(int red, int blue, int green)
    {
      int color = 2220 * red +
                  7067 * blue +
                   713 * green;

      // ...
    }

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

    short bytebit[] = {01, 02, 04, 010, 020, 040, 0100, 0200 };

Данная диагностика классифицируется как:

CWE-682 CERT-DCL50-J