2016-11-24 124 views
0

在这里我不知道为什么内联函数返回2,而我没有返回任何值。如果我在函数中改变了e的值,那么函数返回3.我不知道这个请建议。什么是返回2不是0?

#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,则所有投注都关闭。如果您打开警告,大多数编译器都会提醒您。例如,为-Wall -Wextra GCC /铛给你警告

警告:没有return语句在函数返回非空[-Wreturn型]

更技术性的,当你声明一个函数返回某些内容,称之为Foo,然后运行时为该Foo分配一些内存,该内存必须返回。当您实际编写return some_foo;时,返回的对象some_foo正在分配的内存中构建。如果您忘记(或不想写入)return,则分配的内存将保持未初始化状态,因此您最终将从未初始化的对象读取数据,这是未定义的行为。