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

Данное диагностическое правило основано на руководстве [AUTOSAR](https://www.autosar.org/) \(AUTomotive Open System ARchitecture\) по разработке программного обеспечения\.

Анализатор обнаружил функцию с не\-void возвращаемым типом, которая не возвращает значение на всех путях выполнения\. Согласно стандарту 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);
}
```