﻿# V1037\. Two or more case\-branches perform the same actions\.

Анализатор обнаружил, что в операторе switch разные метки case содержат одинаковые фрагменты кода\. Часто это свидетельствует об избыточном коде, который можно улучшить объединением меток\. Но нередко одинаковые фрагменты кода могут быть причиной copy\-paste программирования и являться настоящими ошибками\.

Рассмотрим пример с избыточным кодом:

```cpp
switch (wParam)
{
case WM_MOUSEMOVE:
  ::PostMessage(hWndServer, wParam, 0, 0);
  break;
case WM_NCMOUSEMOVE:
  ::PostMessage(hWndServer, wParam, 0, 0);
  break;
....
default:
  break
}
```

Действия для нескольких событий мыши действительно могут быть одинаковыми, поэтому код можно написать более компактно:

```cpp
switch (wParam)
{
case WM_MOUSEMOVE:
case WM_NCMOUSEMOVE:
  ::PostMessage(hWndServer, wParam, 0, 0);
  break;
....
default:
  break
}
```

Рассмотрим пример из реального приложения, где разработчик допустил ошибку из\-за опечатки:

```cpp
GLOBAL(void)
jpeg_default_colorspace (j_compress_ptr cinfo)
{
  switch (cinfo->in_color_space) {
  case JCS_GRAYSCALE:
    jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
    break;
  case JCS_RGB:
    jpeg_set_colorspace(cinfo, JCS_YCbCr);
    break;
  case JCS_YCbCr:
    jpeg_set_colorspace(cinfo, JCS_YCbCr);
    break;
  ....
  }
  ....
}
```

В коде метки `JCS_RGB` допущена опечатка\. Следовало передавать в функцию значение `JCS_RGB`, а не `JCS_YCbCr`\.

Исправленный код:

```cpp
GLOBAL(void)
jpeg_default_colorspace (j_compress_ptr cinfo)
{
  switch (cinfo->in_color_space) {
  case JCS_GRAYSCALE:
    jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
    break;
  case JCS_RGB:
    jpeg_set_colorspace(cinfo, JCS_RGB);
    break;
  case JCS_YCbCr:
    jpeg_set_colorspace(cinfo, JCS_YCbCr);
    break;
  ....
  }
  ....
}
```