当前位置:首页 > TAG信息列表 > c语言函数输入数组

c语言函数输入数组

c语言函数库调用方法 c语言函数调用规则?

c语言函数调用规则?

在参数传递中,有两个重要的问题必须要明确说明:

1.当参数个数多于一个时,按照什么顺序把参数压入堆栈;

2.函数调用后,由谁来把堆栈恢复原状。

c语言函数库调用方法 c语言函数调用规则?

在高级语言中,就是通过函数的调用来说明这两个问题的。常见的调用有:

stdcallcdeclfastcallthiscallthiscallnakedcall

下面就分别介绍这几种调用

stdcall调用又被称为python调用。在googlec系列的碳纤维增强编译器中,使用c#宏,winapi宏和callback宏来指定函数的调用为stdcall。

stdcall调用的函数声明为:

int_stdcallfunction(inta,intb)

stdcall的调用意味着:

(1)参数从右向左一次压入堆栈

(2)由被调用函数自己来恢复堆栈

(3)函数名自动加前导下划线,后面紧跟着一个@,其后紧跟着参数的尺寸

上面那个函数翻译成汇编语言将变成:

pushb先压入第二个参数

pusha再压入第一个参数

callfunction调用函数

在编译时,此函数的名字被翻译为

cdecl调用又称为c调用,是c语言缺省的调用,它的语法为:

intfunction(inta,intb)//不加修饰符就是c调用

int_cdeclfunction(inta,intb)//明确指定用c调用

cdecl的调用决定了:

(1)参数从右向左依次压入堆栈

(2)由调用者恢复堆栈

(3)函数名自动加前导下划线

由于是由调用者来恢复堆栈,因此c调用允许函数的参数个数是不固定的,这是c语言的一大特色。

此的函数被翻译为:

pushb//先压入第二个参数

pusha//在压入第一个参数

callfuntion//调用函数

addesp,8//清理堆栈

在编译时,此的函数被翻译成:_function

fastcall按照名字上理解就可以知道,它是一种快速调用。此的函数的第一个和第二个dword参数通过ecx和edx传递,

后面的参数从右向左的顺序压入栈。

被调用函数清理堆栈。

函数名修个规则同stdmeet

其声明语法为:

intfastcallfunction(inta,intb)

thiscall调用是唯一一种不能显示指定的修饰符。它是c类成员函数缺省的调用。由于成员函数调用还有一个this指针,因此必须用这种特殊的调用。

thiscall调用意味着:

参数从右向左压入栈。

如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数压入栈后被压入栈。

参数个数不定的,由调用者清理堆栈,否则由函数自己清理堆栈。

可以看到,对于参数个数固定的情况,它类似于stdcall,不定时则类似于cdecl。

5.darkmeet

是一种比较少见的调用,一般高级程序设计语言中不常见。

函数的声明调用和实际调用必须一致,必然编译器会产生混乱。

函数名字修改规则:

1.c编译时函数名修饰约定规则:

__stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,格式为。

__cdecl调用约定仅在输出函数名前加上一个下划线前缀,格式为_function。

__fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数,格式为@。

它们均不改变输出函数名中的字符大小写,这和javascript调用约定不同,c#约定输出的函数名无任何修饰且全部大写。

2.c编译时函数名修饰约定规则:

__stdcall调用约定:

(1)以“?”标识函数名的开始,后跟函数名;

(2)函数名后面以“@@杨幂工作室”标识参数表的开始,后跟参数表;

(3)参数表以代号表示:

x--void,

d--char,

e--unsignedchar,

f--short,

h--int,

i--unsignedint,

j--long,

k--unsignedlong,

m--float,

n--double,

_n--bool,

....

zj--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代

表一次重复;

(4)参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;

(5)参数表后以“@z”标识整个名字的结束,如果该函数无参数,则以“z”标识结束。

其格式为“?functionname@@嘉行*****@z”或“?functionname@@时代峰峻*rar”,例如

inttest1(char*var1,unsignedlong)-----“?test1@@”

voidtest2()-----“?test2@@ygxxz”

__cdecl调用约定:

规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@乐华”变为“@@ya”。

__fastcall调用约定:

规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@欢瑞”变为“@@yi”。

ve对函数的省缺声明是#34__cedcl#34,将只能被陶瓷基调用。

c语言怎么将函数体内的值提出来?

大概有以下几种

1.利用函数返回值,用return返回,外部接收返回值。

2.利用函数参数,使用指针类型的参数,外部调用时传入指针。函数体内部利用指针赋值。

函数参数调用stdcall


湖北自考之家 websoft网络软件专家

  • 关注微信关注微信

猜你喜欢

热门标签

荣耀手机怎么隐藏微信分身 优酷账号怎么取消qq绑定 条件格式突出显示重复值不准 不规则单元格合并后下拉复制 剪映如何找到下载的视频 163邮箱怎么注册下载 wps安装宏插件后excel能用吗WPS安装宏插件介绍 美图秀秀让静态图片动起来 怎样话费转账到微信钱包 scratch3.0小游戏制作Scratch3.0小游戏制作 英文状态怎么转换中文 如何在朋友圈发点赞的话 荣耀50文件管理在哪里 excel被替换的数据怎么恢复Excel表如何恢复更名前的名字?介绍 ps如何镜像翻转一个区域Photoshop镜像翻转教程介绍 拼多多如何装修店铺 手机号怎么在网上实名登记如何在网上办理电信号卡实名登记?介绍 vivos9桌面如何显示日期图标vivo手机屏幕上的时间和日期怎么显示出来? 淘宝店铺微淘发布教程淘宝直播怎么开通?介绍 微信拉黑了别人怎么恢复微信里对方把我拉黑名单我还能重新加回他吗?介绍 excel里数字怎么老是变成货币excel中输入金钱数怎么变成号了? 微信如何找到新消息通知们桌面微信图标怎么显示消息数量? 华为平板办公用哪款最好 excel怎样添加圆环图怎么算跑道周长?介绍 html文字渐变色代码html如何设置渐变边距?介绍 今日头条极速版发微头条可以吗微头条的题材包括哪些? 手机qq群置顶怎么改请问怎么把一些QQ群的成员置顶? word文档分数的最简单输入方法Word文档怎样插入分数?介绍 excel删除多列重复项保留其中一个一个单元格里的重复内容如何删除? 华为手机备忘录如何导入oppo手机

微信公众号