导航:首页 > 源码编译 > 编译器参数传入顺序

编译器参数传入顺序

发布时间:2023-11-12 19:08:13

Ⅰ C语言程序的运行顺序

1、这个涉及到函数的调用约定
运行结果跟编译器有一定的关系,不同的编译器参数的入栈的顺序不同
一般的编译器是从右到左
如fun(a,b)这个函数调用,是先计算参数b,入栈,再计算参数a,入栈
2、printf("%d
%d",
a++,++a);
//先计算++a,先自增,a的值变为2,将2入栈
再来计算a++,将a的值2入栈,再使a自增,a的值变为3
printf("
%d\n",a);
//a的值已经变为3了
3、printf(%d
%d",
++a.a++);//先计算a++,将a的值1入栈,再使a自增,a的值变为2,再来计算++a,先自增,a的值为3,将3入栈,输出3
1
printf("
%d\n",a);
//输出3
4、三种调用约定:
__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。
C调用约定(即用__cdecl关键字说明)和__stdcall调用约定有所不同,虽然参数传送方面是一样的,但对于传送参数的内存栈却是由调用者来维护的(也正因为如此,实现可变参数的函数只能使用该调用约定),另外,在函数名修饰约定方面也有所不同。
__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用CX和EDX传送前两个双字或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。

阅读全文

与编译器参数传入顺序相关的资料

热点内容
什么app可以查到装修 浏览:652
什么鱼的按摩app 浏览:501
云电脑的服务器网站 浏览:437
木工专用空气压缩机 浏览:179
synfloodlinux 浏览:85
linux卸载openssl 浏览:100
python爬虫网址要求 浏览:966
什么是金税盘服务器 浏览:437
phpsocket开发 浏览:509
caj文档转pdf 浏览:553
eclipsemaven命令配置 浏览:337
雅安视监控app叫什么名字 浏览:731
东方财富app筹码蓝色和红色是什么 浏览:566
pr安装文件夹图标变白 浏览:179
如何用服务器建设网站 浏览:349
定时闹钟单片机课程设计 浏览:537
腰椎压缩性骨折症状 浏览:466
绝地求生全军出击的服务器什么时候开 浏览:493
怎么入侵游戏服务器篡改数据 浏览:736
线性压缩机原理 浏览:543