﻿# V536\. Constant value is represented by an octal form\.

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

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

Рассмотрим пример, взятый из реального приложения\. Пример достаточно большой, но хорошо демонстрирует суть проблемы\.

```cpp
inline 
void elxLuminocity(const PixelRGBf& iPixel,
                   LuminanceCell< PixelRGBf >& oCell)
{
  oCell._luminance = 0.2220f*iPixel._red +
                     0.7067f*iPixel._blue +
                     0.0713f*iPixel._green;
  oCell._pixel = iPixel;
}

inline 
void elxLuminocity(const PixelRGBi& iPixel,
                   LuminanceCell< PixelRGBi >& oCell)
{
  oCell._luminance = 2220*iPixel._red +
                     7067*iPixel._blue +
                     0713*iPixel._green;
  oCell._pixel = iPixel;
}
```

Рассматривая подобный код непросто заметить ошибку, но она есть\. Первая функция elxLuminocity корректна и работает со значения типа float\. В коде имеются следующие константы: 0\.2220f, 0\.7067f, 0\.0713f\. Вторая функция аналогична первой, но работает с целыми значениями\. Все целые значения умножены на 10000\. Вот эти значения: 2220, 7067, 0713\. Ошибка в том, что последняя константа "0713" задана в восьмеричной системе счисления и имеет значение вовсе не 713, а 459\. Исправленный вариант кода:

```cpp
oCell._luminance = 2220*iPixel._red +
                   7067*iPixel._blue +
                   713*iPixel._green;
```

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

```cpp
static unsigned short bytebit[8] = {
  01, 02, 04, 010, 020, 040, 0100, 0200 };
```