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

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