メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

値を返さない関数

値を返すはずの 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() の定義にレッド エラーを返します。

修正 — すべての入力に対し値を返す

1 つの修正方法として、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 の値を次の 2 つの範囲に分割できます。

  • ch < = 0:関数呼び出し reply(ch) に対して、戻り値はありません。

  • ch > 0 および ch < 10: 関数呼び出し reply(ch) に対して、戻り値があります。

したがって、[値を返さない関数] チェックは、reply() の定義にオレンジ エラーを返します。

修正 — すべての入力に対し値を返す

1 つの修正方法として、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