2016-11-24 11 views
0

ここで私は値が返されていないのになぜインライン関数が2を返すのかわかりません。関数のeの値を変更した場合、関数は3を返します。私はこれをお勧めしません。これは0ではなく2を返しますか?

#include <iostream> 

using namespace std; 

int a, b; 

inline int add(int e, int d) 
{ 
    e = 211; 
    d = 312; 

    //return e+d; 
} 

int main() 
{ 
    a = 2; b = 3; 
    int c = add(a, b); 
    cout << c; 
} 
+1

UBにはすべてのパスが返されるわけではありません。 – Jarod42

+0

ありがとうございましたvsoftcoようやくこの問題は私の頭の中にあります。もう一度ありがとう。 –

答えて

5

このように関数を使用すると、未定義の動作になります。ファンクションプロトタイプで何かが返されたが、returnを忘れた場合、すべてのベットはオフになっています。ほとんどのコンパイラは、警告をオンにすると、このようなことについてあなたに警告します。非空[-Wreturn型]を返す関数でノーreturn文

より技術的に、あなたはその関数を宣言する場合:たとえば、GCC /打ち鳴らすため-Wall -Wextra

警告あなたに警告を与えます何かを返し、何かをFooと呼ぶと、ランタイムは返さなければならないものをFooのためにいくつかのメモリを割り当てます。 return some_foo;を実際に書くと、返されたオブジェクトsome_fooが割り当てられたメモリに構築されています。 returnを忘れた場合(または書き込みしたくない場合)は、割り当てられたメモリは初期化されずに残されます。したがって、初期化されていないオブジェクトからの読み取りが終了します。

関連する問題