Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Чрезмерное использование 'goto' приводит к плохой структурированности кода, усложняя его понимание.
Для снижения визуальной сложности кода рекомендуется отказаться от переходов во вложенные блоки или между блоками, расположенными на одном уровне.
Пример 1:
void V2532_pos1()
{
...
goto label;
...
{
label:
...
}
}
Здесь 'goto' ссылается во вложенный блок, что нарушает данное правило.
На следующий пример анализатор не будет выдавать предупреждение:
void V2532_neg1()
{
...
label:
...
{
goto label;
...
}
}
Примечание: тела switch-меток рассматриваются как составные выражения, даже если они не обернуты в фигурные скобки. Поэтому прыжки в тело switch-метки из внешнего кода и прыжки между разными switch-метками нарушают данное правило.
Приведем примеры.
Прыжок в switch-метку из внешнего кода (ошибка):
void V2532_pos2(int param)
{
goto label;
switch (param)
{
case 0:
break;
default:
label:;
break;
}
}
Прыжок между switch-метками (ошибка):
void V2532_pos3(int param)
{
switch (param)
{
case 0:
goto label;
break;
default:
label:
break;
}
}
Прыжок из switch-метки во внешний код (ok):
void V2532_neg2(int param)
{
label:
switch (param)
{
case 0:
goto label;
break;
default:
break;
}
}
Прыжок в пределах одной switch-метки (ok):
void neg3(int param)
{
switch (param)
{
case 0:
{
...
{
goto label;
}
}
label:
break;
default:
break;
}
}
Данная диагностика классифицируется как:
|