消息关闭
    暂无新消息!
如图。输出结果为〔4+5+2=11〕。求大神详细解释,关于栈的常识我懂,参数从右向左调用我也懂,但是这个结果我是真不懂。求解

8个回答

︿ 2
这个没有副作用,所有的++都已经有逗号分隔开了。
这个问题主要是要考虑到函数参数的压栈顺序,而这个压栈顺序是跟ABI相关的,不同的编译器在不同的平台和操作系统下面实现不同的ABI,楼主的测试结果来看,应该是从右往左入栈。
add(a++, ++a, a++);
        <------<------<---
因为从右往左,所以楼主自己就知道该怎么判断了。

真正未定义的是这样子的: a++ + ++a,这才是坑爹的玩意
︿ 1
编译器不同,可能会产生不同的计算值。
在实际编写程序的过程中,应当尽量避免此类运算的使用【一般也不会用到】,
而使用没有编译歧义的代码。
︿ 1
各个厂商设计得都不一样,你用codeblocks和vc6运行都会不同。
怎么可能出这种题,退一万步说即使面试这种题,你直接指出来,估计这样分更高哦
︿ 1
不论前++还是后++都会有副作用;
像这种:add(a++, ++a, a++);这种问题不建议继续讨论了。以后要避免写这样的代码;