2016-11-15 1 views
-1

この関数は、必要でない場合でも値を返します。この関数は、どのようにして値を返さないのですか?

#include<iostream> 
using namespace std; 
int foo(int a,int b) 
{ 
    if(a>b) 
     return a; 
    else if(a<b) 
     return b; 
} 
int main() 
{ 
    int x=7,y=7; 
    cout<<foo(x,y); 
    return 0; 
} 

出力である:

7 

またそれだけGCCコンパイラに適切な出力を生成する(IはDevのC++を使用しました)。ターボCはゴミ値を生み出しました。 これはどうやって説明できますか?

+3

これは未定義の動作です。あなたは実際に戻り値として何を期待しますか? –

+0

なぜ「7」を「正しい出力」にするべきですか? –

+0

私は何も期待していません。私はそれがどのように返っているのだろうと思っていた。 –

答えて

3

すべてのプログラム制御パスで値を返さない場合の動作は、未定義です。

コンパイラは何もすることができません。

あなたのコンパイラはありませんでした警告 (GCCも、ターボCはおそらくその年齢のためではありません)。

+0

皮肉なことに、Turbo cは警告を出しますが、Dev C++は警告しません! –

+0

適切な設定の@SubramanianSridharan Dev C++にも警告が表示されます。 –

+0

@SubramanianSridharanすべての警告をオンにして、(想定されるツールチェーン)GCCも警告します。 –

関連する問題