V591. Non-void function should return a value.

Анализатор обнаружил функцию, которая возвращает случайное значение. Это может являться ошибкой.

Рассмотрим пример:

int main (int argc, char** argv)
{
  ...
  printf("FINISH\r\n");
}

Функция main() возвращает целое число, которое принимает вызывающий процесс. Если main() нe возвращает значение явно, то вызывающий процесс получает формально неопределенное значение. Корректный вариант:

int main (int argc, char** argv)
{
  ...
  printf("FINISH\r\n");
  return retCode;
}

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

BOOL IsInterestingString(char *s)
{
  if (s == NULL)
    return FALSE;
  if (strlen(s) < 4)
    return;
  return (s[0] == '#') ? TRUE : FALSE;
}

В коде допущена опечатка. Если длина строки меньше 4 символов, то функция вернет неопределенное значение. Корректный вариант:

BOOL IsInterestingString(char *s)
{
  if (s == NULL)
    return FALSE;
  if (strlen(s) < 4)
    return FALSE;
  return (s[0] == '#') ? TRUE : FALSE;
}

Примечание. Анализатор старается определить ситуации, когда отсутствие возвращаемого значения не является ошибкой. Пример кода, который анализатор сочтет безопасным:

int Foo()
{
  ...
  exit(10);
}

Данная диагностика классифицируется как:

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V591.


Найденные ошибки

Проверено проектов
411
Собрано ошибок
14 123

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять