Пропавшие без вести оператора возврата

Функция не делает возвращаемого значения, хотя возвращаются, типом не является 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