Return value not initialized

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