CERT C: Rule MSC37-C

Убедитесь, что управление никогда не достигает конца непустой функции

Описание

Определение правила

Убедитесь, что управление никогда не достигает конца непустой функции.[1]

Реализация Polyspace

Эта проверка проверяет на Отсутствующий оператор возврата.

Примеры

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

Проблема

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

Риск

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

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

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

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

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

Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты 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;  
  }

Проверяйте информацию

Группа: Правило 48. Разное (MSC)
Введенный в R2019a

[1] Это программное обеспечение было создано MathWorks, включающее фрагменты: «Сайт SEI CERT-C», © 2017 Университет Карнеги Меллон, Веб-сайт SEI CERT-C + + © 2017 Университет Карнеги Меллон, "Стандарт кодирования SEI CERT C - Правила разработки безопасных, Надежные и безопасные системы - 2016 Edition ", © 2016 Университет Карнеги Меллон, и "Стандарт кодирования SEI CERT C++ - Правила разработки безопасных, Надежные и безопасные системы в C++ - 2016 Edition "© 2016 Университет Карнеги Меллон, с специального разрешения от его Института программной инженерии.

ЛЮБОЙ МАТЕРИАЛ УНИВЕРСИТЕТА КАРНЕГИ МЕЛЛОН И/ИЛИ ЕГО ИНЖЕНЕРНОГО ИНСТИТУТА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, СОДЕРЖАЩИЙСЯ В НАСТОЯЩЕМ ДОКУМЕНТЕ, ПОСТАВЛЯЕТСЯ НА БАЗИСЕ «КАК ЕСТЬ». УНИВЕРСИТЕТ КАРНЕГИ МЕЛЛОН НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, В ОТНОШЕНИИ ЛЮБОГО ВОПРОСА, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЮ ПРИГОДНОСТИ ДЛЯ ЦЕЛЕЙ ИЛИ КОММЕРЧЕСКОЙ ВЫГОДЫ, ИСКЛЮЧИТЕЛЬНОСТИ, ИЛИ УНИВЕРСИТЕТ КАРНЕГИ МЕЛЛОН НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ В ОТНОШЕНИИ СВОБОДЫ ОТ ПАТЕНТА, ТОВАРНОГО ЗНАКА ИЛИ НАРУШЕНИЯ АВТОРСКИХ ПРАВ.

Это программное обеспечение и связанная с ним документация не были рассмотрены и не одобрены Университетом Карнеги-Меллон или его Институтом программной инженерии.