2013-12-21 3 views
0

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

функция

2.fun2() вызывается с arguement х и использовали его в работе" S = X * 4" и на выходе „соиЬ < < fun2()“ - я получаю выход 8 - „2 * 4“

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

+2

Является ли отсутствие возвращаемых значений из ваших функций опечаткой или это подлинный код? – mathematician1975

+0

@ математик1975 да. это подлинный код. Я скомпилировал его в windriver rtos с версией g ++ версии 2.6.25.5. –

+1

Поскольку ваш код имеет неопределенное поведение, он не «делает» все, что мы можем обсудить. –

ответ

1

Ваши функции не возвращают anythi ng, несмотря на наличие типа возврата. Это неопределенное поведение. Этот вопрос/ответ содержит более подробную информацию Function with missing return value, behavior at runtime.

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

+0

То, что я думал, но это не дает никакой ошибки, даже никаких предупреждений компилятора. –

+0

Вы запросили ВСЕ предупреждения от компилятора? – mathematician1975

+2

@SantoshSahu: компилятор не обязан стандартом выдавать какие-либо предупреждения для этого, хотя, вероятно, это произойдет, если вы включите их все по математике. –

 Смежные вопросы

  • Нет связанных вопросов^_^