0

以下はコードです:

コード :

#include <iostream>

using namespace std;

int sum(int ); //To sum up the user input up to 1 , for e.g 4 = 4 + 3 + 2 + 1 = 10

int main(void)
{
    int num;
    int total;

    cin >> num;
    total = sum(num);
    cout << total;
    return 0;
}

int sum(int num)
{
    if(num > 0) // How if num is -1 or -10??
        return num + sum(num - 1);
}

質問 :

-11.) 上記のコードを実行して、eg orの if 条件に違反する値を入力しようとしました-100。それでもcouttotal変数を取得すると、変数に与えた値が返されますnum

2.) 私の質問は、これは標準的な動作ですか? num が condition に違反している場合にreturn備えて、余分なステートメントはありません。returnそれで、これは、条件が真でない場合に元の値を返すのは正常なことですか、それとも使用されているコンパイラに依存しますか?

ありがとうございました 。

4

1 に答える 1

3

値を返すことを約束し、未定義の動作を誘発しない関数(C では、値が使用されている場合のみ)。

ここで、関数には 2 つの実行パスがあります。

int sum(int num) {
    if (sum > 0) 
        return num + sum(num - 1); // code path 1
    // code path 2
}

2 番目のコード パスでは、何も返されません。

未定義の動作は、何でも起こり得ることを意味します。一般的なイメージは、デーモンが鼻から飛び出し始める可能性があるというものです。実際には、実装に応じて、多かれ少なかれランダムな値を取得する可能性が高くなります。あなたの場合、あなたのコンパイラにとって、このプログラムとその一連の最適化のように見えます(おそらく星が整列しているため)num. あなたはラッキーです。

ちなみに、私のコンパイラは警告を出します

source.cpp: In function 'int sum(int)':
source.cpp:22:1: warning: control reaches end of non-void function [-Wreturn-type]
于 2012-11-10T16:19:55.267 に答える