C语言中 int x=10; printf("%d%d%d",++x,++x,++x);为啥运行结

发布网友 发布时间:2024-10-23 20:49

我来回答

3个回答

热心网友 时间:2024-10-25 22:15

这个是和函数参数的压栈顺序导致的,然而编译出来的c/c++程序的参数压栈顺序只和编译器相关。

例如:

VC6:

        调用约定        堆栈清除    参数传递 

        __cdecl                  调用者      从右到左,通过堆栈传递 

        __stdcall                  函数体         从右到左,通过堆栈传递 

        __fastcall                 函数体         从右到左,优先使用寄存器(ECX,EDX),然后使用堆栈 

这个要根据你编译器的规则而定,所以汇蓝鸟师兄的答案才是正确的。

我这里VS2012,测试代码如下:


#include <stdio.h>
void   __fastcall  printf__fastcall(int _left,int _right )
{
printf("__fastcall:\t\t_right=0x%x,_right=0x%x\n",&_left,&_right);
}

void  __stdcall  printf__stdcall(int _left,int _right)
{
printf("printf__stdcall:\t_right=0x%x,_right=0x%x\n",&_left,&_right);
}

void  __cdecl printf__cdecl(int _left,int _right)
{
printf("printf__cdecl:\t\t_right=0x%x,_right=0x%x\n",&_left,&_right);
}

int main( int argc, char* argv[] )
{
printf__fastcall(1,2);
printf__stdcall(1,2);
printf__cdecl(1,2);

return 0;
}

热心网友 时间:2024-10-25 22:23

ub,不同的编译器结果可能不一样,也就是说结果可能是13 12 11 ,也可能是 11 12 13,取决于编译器是怎么实现的

热心网友 时间:2024-10-25 22:20

简单的说,因为默认情况下,函数参数的计算方式是从右向左的。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com