# V2542. MISRA. Function with a non-void return type should return a value from all exit paths.

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Анализатор обнаружил функцию с не-void возвращаемым типом, которая не возвращает значение на всех путях выполнения. Согласно стандарту C/C++, это может привести к неопределенному поведению.

Рассмотрим пример, в котором неопределенное значение возвращается только иногда:

    BOOL IsInterestingString(char *s)
    {
      if (s == NULL)
        return FALSE;
      if (strlen(s) < 4)
        return;
      return (s[0] == '#') ? TRUE : FALSE;
    }

В коде допущена опечатка. Если длина строки меньше 4 символов, то функция вернет неопределенное значение. Корректный вариант:

    BOOL IsInterestingString(char *s)
    {
      if (s == NULL)
        return FALSE;
      if (strlen(s) < 4)
        return FALSE;
      return (s[0] == '#') ? TRUE : FALSE;
    }

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

    int Foo()
    {
      ...
      exit(10);
    }

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

MISRA-C-2012-17.4 MISRA-C-2023-17.4 MISRA-CPP-2008-8.4.3