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

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

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

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

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

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

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

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

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