﻿# V2525\. MISRA\. Every 'switch' statement should contain non\-empty switch\-clauses\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Это правило различается для языков C и C\+\+\. В C каждый 'switch' должен иметь по крайней мере две непустых метки, которыми могут быть 'case' или 'default'\. В C\+\+ каждый 'switch' должен иметь по крайней мере одну непустую метку 'case'\.

Конструкции 'switch', не удовлетворяющие этим условиям, являются избыточными и могут являться признаком ошибки программиста\. 

Пример 1: 

```cpp
void example_1(int param)
{
  switch(param)
  {
    case 0:
    default:
      Func();
      break;
  }
}
```

Подобный 'switch' является излишним и не имеет никакого смысла\. Независимо от значения переменной 'param', всегда будет выполняться только тело 'default'\.

На следующий пример анализатор не будет выдавать предупреждение:

```cpp
void example_2(int param)
{
  switch(param)
  {
    case 0:
      DoSmth1();
      break;
    case 1:
      DoSmth2();
      break;
    ....
    default:
      Func();
      break;
  }
}
```

Пример кода, на который анализатор выдаст предупреждение только при использовании компилятора для языка C:

```cpp
void example_3(int param)
{
  switch(param)
  {
    case 10:
    case 42:
      DoMath();
      break;
  }
}
```