zoukankan      html  css  js  c++  java
  • 第十章扩展——__cdecl 的压栈方式——printf

    #include<stdio.h>

    int main()

    {

      int  b = 3;

      int arr[] = {6,7,8,9,10}; 

      int *ptr = arr;

      *(ptr++) += 123;

      //printf("%d,%d\n", *ptr, *(++ptr));   //输出:8,8 

      printf("%d,%d\n", *ptr, *(ptr++));//输出:8,7

      return 0;

    }

    _cdecl 压栈方式是从右到左

    更加明显的例子:

    #include<stdio.h>

    int main()

    {

      int a = 5, b = 7;

      printf("%d  %d\n",a,b);

      return 0;

    }

    部分汇编代码:

    printf("%d  %d\n",a,b);

    00251BBC  mov         esi,esp 

    00251BBE  mov         eax,dword ptr [b] 

    00251BC1  push        eax 

    00251BC2  mov         ecx,dword ptr [a] 

    00251BC5  push        ecx 

    00251BC6  push        255858h 

    00251BCB  call        dword ptr ds:[2592BCh] 

    00251BD1  add         esp,0Ch 

    00251BD4  cmp         esi,esp 

    00251BD6  call        __RTC_CheckEsp (025113Bh) 

    对于

        int a = 5;

        printf("%d\n", (a = 2 * 5, a * 4), printf("%d\n", a));

    可见使用VS 和使用 mingw32效果是不一样的!

  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/zhuyp1015/p/2497443.html
Copyright © 2011-2022 走看看