exponenta event banner

Функция не возвращает значение

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

Описание

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

Примеры

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

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

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

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

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

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

Одной из возможных корректировок является возврат значения для всех входов в 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(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), существует возвращаемое значение.

Поэтому функция, не возвращающая значение, возвращает оранжевую ошибку в определении reply().

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

Одной из возможных корректировок является возврат значения для всех входов в 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++
Язык: C++
Акроним: FRV