可以看出当参数含有表达式的时候TC,Tc3是按照从右向左的顺序计算完一个表达式后变函数参数压栈顺序一次而VC.net和GCC却是从右向左计算完所有的表达式之后,又从右向左将結果函数参数压栈顺序
这一点在另一篇文章中也得到了验证:
若在编译时加入命令行参数_cdecl,则显式使函数参数从右至左函数参数压栈顺序_fascall使程序在可能的情况下使用寄存器传递参数。程序员可以使用这些约定来更改参数调用的顺序对于此题,printf的后两个参数是表达式洇此函数参数压栈顺序前要计算表达式的值。生成的汇编:
并不是在pop时候才发生变化 asm在虚拟机里面,怎么都复制不出来我手敲一遍给你。 |
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。