当printf遇到了i++ 或++i,会发生什么事情呢?
看看各大编译器对它的反应
# include <stdio.h>
main()
{
int i=1;
int l, j, k; l=1; j=2; k=3;
printf("%d %d %d", i , ++i, ++i); //3 3 2 under vc++ 6.0 and dev-c++, turbo c; 3 3 3 under visual studio
i=1;
printf("%d %d %d", i , i++, i++); //1 1 1 under vc++6.0 ;output 3 2 1 under dev-c++ , turbo c and visual studio
printf("%d %d %d", l , j, k); //1 2 3
system("pause");
}
Base on the output above , we can coclude that:
i++ ++i
vc 先输出各个表达式的结果,后计算 从printf最后一个参数进栈,同时计算结果,按出栈顺序输出
vs 从printf最后一个参数进栈,同时计算结果,按出栈顺序输出 先计算各个++i得到 i 的结果,后输出
turbo c 从printf最后一个参数进栈,同时计算结果,按出栈顺序输出 从printf最后一个参数进栈,同时计算结果,按出栈顺序输出
dev-c++从printf最后一个参数进栈,同时计算结果,按出栈顺序输出 从printf最后一个参数进栈,同时计算结果,按出栈顺序输出