как именно работает раскрутка стека между вызывающей функцией и вызываемой функцией [duplicate]

0

У меня есть две небольшие функции, называемые из основного. Ниже приведена программа

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(), вызываемая с аргументом x, но операция не выполняется с использованием переменной x. Таким образом, на выходе "cout << fun1() - я получаю выход 2" текущее значение n ".

2.fun2(), вызванная аргументом x, и использовала ее в операции "s = x * 4", а в выводе "cout << fun2()" - я получаю вывод 8-- "2 * 4".

Я не передаю никакого значения ссылки или указателя, чтобы функция все еще получала два разных выхода. Хотелось бы узнать, как разматывание стека отличается в двух разных случаях.

  • 2
    Отсутствие возвращаемых значений в ваших функциях является опечаткой или это подлинный код ??
  • 0
    @ mathematician1975 да. это подлинный код. Я скомпилировал его в Windriver RTOS с g ++ версии 2.6.25.5.
Показать ещё 1 комментарий
Теги:
function
callstack

1 ответ

1

Ваши функции ничего не возвращают, несмотря на тип возврата. Это неопределенное поведение. Этот вопрос/ответ предоставляет более подробную информацию Функция с отсутствующим возвратным значением, поведение во время выполнения.

Поскольку вы вызываете неопределенное поведение, ваш вывод на дисплей практически не имеет смысла.

  • 0
    Это то, что я думал, но это не дает никакой ошибки, даже не предупреждения компилятора.
  • 0
    Вы запрашивали ВСЕ предупреждения от компилятора?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню