【发布时间】:2012-10-09 05:47:17
【问题描述】:
main()
{
int i=5;
printf("%d%d%d%d%d%d",i++,i--,++i,--i,i);
}
输出是 45545,但我不知道它是如何工作的。有人说函数调用中的参数是从左到右压入堆栈的。
【问题讨论】:
-
小心,你有 6 个格式指定器
%d并且只有 5 个参数... -
对参数通过堆栈传递的概念要非常小心。现代编译器试图通过寄存器传递尽可能多的参数。
-
因为评估是从右到左开始的
-
在 g++ 中是,在 Visual Studio 中不是。在 VS 中,++s 和 --s 直到 printf 完成后才会生效。