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