最近在csdn上看到一个华为的面试题目,折腾了一会儿,才发现是个编译器相关的问题。
但是,确实是一个很好的讨论。
Mark一下。
程序源代码
执行结果:
fStack stack1: 8, fStack stack2: 8
fStack stack1: 8, fStack stack2: 7
8,8
8,7
5 5
end
经过一致讨论,存在几个方面:
1) 函数入参的压栈。 大牛们的结论是入参是有规定的,从右到左依次压栈。
但是,这点无法解释上述的结果。
2) 函数入参的求值。
这个是和编译器相关的,大多数情况下,入参的求值在压栈的过程中完成。
因此,上面的结果自然得到。
建议:
在调用函数的时候,慎重传参数,特别是上面这种典型的情况。
我觉得还有一种情况就是:
function(function1(), function2()), 同时,function1和function2都对某个全局变量进行了修改。
罪过罪过。