Missing return statement

Функция не делает возвращаемого значения, хотя возвращаются, типом не является void

Описание

Отсутствие оператора возврата происходит, когда функция не возвращает значение вдоль по крайней мере одного пути к выполнению. Если типом возврата функции является void, эта ошибка не происходит.

Риск

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

Фиксация

В большинстве случаев можно зафиксировать этот дефект путем размещения return оператор в конце тела функции.

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

Смотрите примеры мер ниже.

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

Примеры

развернуть все

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++
Значение по умолчанию: на
Синтаксис командной строки: MISSING_RETURN
Удар: низко

Введенный в R2013b