exponenta event banner

Возвращаемое значение не инициализировано

Функция C не возвращает значение, когда ожидается

Описание

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

Примеры

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

#include <stdio.h>
int input(void);
int inputRep(void);

int reply(int msg) {
  int rep = inputRep();
  if (msg > 0) return rep;
}

void main(void) {
  int ch = input(), ans;
  if (ch <= 0)
    ans = reply(0);
  else
    ans = reply(ch);
  printf("The answer is %d.",ans);
}

В этом примере для вызова функции reply(0), возвращаемое значение отсутствует. Поэтому проверка Return value not initialized возвращает красную ошибку. Второй вызов reply(ch) всегда возвращает значение. Поэтому проверка по этому вызову выполняется зеленым цветом.

Коррекция - возвращаемое значение для всех входов

Одной из возможных корректировок является возврат значения для всех входов в reply().

#include <stdio.h>
int input();
int inputRep();

int reply(int msg) {
  int rep = inputRep();
  if (msg > 0) return rep;
  return 0;
}

void main(void) {
  int ch = input(), ans;
  if (ch <= 0)
    ans = reply(0);
  else
    ans = reply(ch);
  printf("The answer is %d.",ans);
}
#include <stdio.h>
int input();
int inputRep(int);

int reply(int msg) {
  int rep = inputRep(msg);
  if (msg > 0) return rep;
}

void main(void) {
  int ch = input(), ans;
  if (ch < 10)
    ans = reply(ch); 
  else
    ans = reply(10);
  printf("The answer is %d.",ans);
}

В этом примере в первой ветви if оператор, значение ch можно разделить на два диапазона:

  • ch < = 0Для вызова функции reply(ch), возвращаемое значение отсутствует.

  • ch > 0 и ch < 10Для вызова функции reply(ch), существует возвращаемое значение.

Поэтому проверка Return value not initialized возвращает оранжевую ошибку на reply(ch).

Коррекция - возвращаемое значение для всех входов

Одной из возможных корректировок является возврат значения для всех входов в reply().

#include <stdio.h>
int input();
int inputRep(int);

int reply(int msg) {
  int rep = inputRep(msg);
  if (msg > 0) return rep;
  return 0;
}

void main(void) {
  int ch = input(), ans;
  if (ch < 10)
    ans = reply(ch); 
  else
    ans = reply(10);
  printf("The answer is %d.",ans);
}

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

Группа: Поток данных
Язык: C
Акроним: IRV