如何在调用函数和被调用函数之间进行堆栈展开

时间:2013-12-21 14:22:55

标签: c++ function callstack

我有两个叫main的小函数。以下是程序

int fun1(int x)
{
   int s;
   s=8;
}

int fun2(int x)
{
   int s;
   s=x*4;
}
int main(int argc, char *argv[])
{
   int n=2;
   cout << fun1(n)<<endl;
   cout<<fun2(n)<<endl;
   return 0;
}

1.fun1()函数使用arguement x调用但没有使用x变量完成操作。   所以在输出“cout&lt;&lt; fun1() - 我得到输出2”n的现值。

2.fun2()函数使用arguement x调用并在操作“s = x * 4”中使用它 并在输出“cout&lt;&lt; fun2()” - 我得到输出8 - “2 * 4”。

我没有将任何引用或指针值传递给仍然获得两个不同输出的函数。 想知道在两个不同的函数情况下堆栈展开是如何不同的。

1 个答案:

答案 0 :(得分:1)

尽管有返回类型,但您的函数不会返回任何内容。这是未定义的行为。这个问题/答案提供了更多详细信息Function with missing return value, behavior at runtime

当您调用未定义的行为时,您的显示输出基本上没有意义。