Missing return statement

Функция не возвращает значение, хотя возвращаемый тип не void

Описание

Этот дефект возникает, когда функция не возвращает значение по крайней мере по одному пути выполнения. Этот дефект не возникает, если:

  • Тип возврата функции void.

  • Путь выполнения завершается функцией, которая не возвращает поток выполнения, такой как [[noreturn]] функция.

Риск

Если функция имеет не - void возвращает значение в своей подписи, ожидается, что оно вернёт значение. Значение возврата этой функции может использоваться в последующих расчетах. Если выполнение тела функции проходит путь, где a return оператор отсутствует, возвращаемое значение функции неопределенно. Расчеты с этим возвращаемым значением могут привести к непредсказуемым результатам.

Зафиксировать

В большинстве случаев можно исправить этот дефект, поместив return оператор в конце тела функции. Если ваш код имеет пути выполнения, которые не возвращают поток выполнения, задайте их с помощью атрибута [[noreturn]].

Кроме того, можно идентифицировать, какие пути выполнения через тело функции не имеют return оператор и добавление return оператор на этих путях. Часто детали результата показывают последовательность событий, которые указывают на этот путь выполнения. Можно добавить return оператор в соответствующей точке пути. Если сведения о результате не отображают историю событий, можно отследить их с помощью опций правого щелчка в исходном коде и просмотреть предыдущие связанные события. Смотрите также Результаты интерпретации Bug Finder в интерфейсе пользователя Polyspace Desktop.

См. примеры исправлений ниже.

Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

Если анализ помечает отсутствующее return оператор для пути, где существует функция завершения процесса, можно информировать анализ функции завершения процесса с помощью опции -termination-functions.

Примеры

расширить все

int AddSquares(int n)
 {
   int i=0;
   int sum=0;
   
   if(n!=0) 
    {
     for(i=1;i<=n;i++)
        {
         sum+=i^2;
        }
     return(sum);
    }
 } 
/* Defect: No return value if n is not 0*/

Если n равно 0, код не вводит if оператор. Поэтому функция AddSquares не возвращает значение, если n равен 0.

Коррекция - поместите оператор возврата на каждый путь выполнения

Одной из возможных коррекций является возврат значения в каждой ветви if...else оператор.

 int AddSquares(int n)
 {
   int i=0;
   int sum=0;
   
   if(n!=0) 
    {
     for(i=1;i<=n;i++)
        {
         sum+=i^2;
        }
     return(sum);
    } 
   
   /*Fix: Place a return statement on branches of if-else */
   else 
     return 0;  
  }

Информация о результатах

Группа: Поток данных
Язык: C | C++
По умолчанию: On
Синтаксис командной строки: MISSING_RETURN
Влияние: Низкое
Введенный в R2013b