本文由创新互联(www.cdcxhl.com)小编为大家整理,本文主要介绍了c语言如何使用定义函数的相关知识,希望对你有一定的参考价值和帮助,记得关注和收藏网址哦!
网站建设公司,为您提供网站建设,网站制作,网页设计及定制网站建设服务,专注于企业网站制作,高端网页制作,对石雕等多个行业拥有丰富的网站建设经验的网站建设公司。专业网站设计,网站优化推广哪家好,专业营销推广优化,H5建站,响应式网站。
我们可以在头文件和主函数之间定义,并编写方法程序。
2.
同样,我们也可以把它写在主函数之后。
3.
但是,此时系统会报告一个错误。
4.
如何解决这些错误?我们可以在主函数之前定义函数的定义句。
5.
这个定义必须以分号结束。
6.
接下来,我们可以开始编写执行过程了。
1.当参数个数多于一个时,参数按什么顺序压入堆栈;
2.函数被调用后,谁来把栈恢复到原来的状态?
在高级语言中,这两个问题是通过调用函数来解释的。的常见调用方法有:
stdcall cdecl fast call this call this call裸调用
以下是几种呼叫方法:
1.stdcall
Stdcall调用模式也称为Pascal调用模式。在微软C系列的C/C编译器中,使用PASCAL宏、WINAPI宏和CALLBACK宏来指定函数调用为stdcall。
stdcall方法的函数声明是:
int _stdcall函数(int a,int b);
调用stdcall的意味着:
(1)参数一次从右向左压入堆栈。
(2)被调用的函数本身恢复堆栈。
(3)函数名自动加下划线,前加下划线,后加@,后加参数大小。
上面的函数翻译成汇编语言就会变成:
b先推第二个参数。
再次按下第一个参数。
调用函数调用函数
在编译时,这个函数的名字被翻译成_function@8。
2.cdecl
Cdecl调用模式,也称为C调用模式,是C语言的默认调用模式,其语法为:
Int function(int a,int b)///不带修饰符,是C调用的
Int _cdecl function(int a,int b) //在c中显式指定调用。
调用cdecl的决定了:
(1)参数从右向左压入堆栈。
(2)调用者恢复堆栈。
(3)函数名自动加前导下划线。
因为调用者还原堆栈,所以C调用所允许的函数的参数个数是不固定的,这是C语言的一大特点。
这种的功能翻译过来就是:
b//先推第二个参数
a//推送第一个参数
调用函数//调用函数
添加,8//清除堆栈
在编译时,这种的函数被翻译成:_function。
3.快速呼叫
Fastcall从名字就可以知道,是一种快捷的调用。以这种传递函数的第一和第二DWORD参数通过ecx和edx,
以下参数从右向左推入堆栈。
被调用的函数清除堆栈。
函数名修改的规则与stdcall相同。
它的声明语法是:
int fastcall函数(int a,int b);
4.这通
Thil调用方法是唯一不能显示指定修饰符的方法。它是C类成员函数的默认调用方法。因为成员函数调用也有这个指针,所以必须用这种特殊的调用。
调用thil的方法意味着:
参数从右向左推入堆栈。
如果参数个数确定,这个指针通过ecx传递给被调用者;如果参数个数不确定,那么在所有参数都被推入堆栈后,这个指针被推入堆栈。
如果参数个数不确定,调用者会清空堆栈,否则函数会自己清空堆栈。
可以看出,当参数个数固定时,类似于stdcall,不固定时,类似于cdecl。
5.裸呼
是一种比较少见的调用方法,在一般的高级编程语言中并不常见。
函数声明的调用必须与实际调用一致,这必然会导致编译器的混乱。
函数名修改规则:
1.c编译时函数名修饰约定规则:
__stdcall调用约定在输出函数名前添加一个下划线前缀,后跟一个 "@ "符号及其参数的字节数,格式为_function@8。
__cdecl调用约定只给输出函数名加一个下划线前缀,格式为_function。
__fastcall调用约定添加了一个 "@ "符号,后面跟一个 "@ "符号及其参数的字节数。格式是@function@8。
它们不改变输出函数名中字符的大小写,这与PASCAL调用约定不同,PASCAL调用约定规定输出函数名全部大写,不做任何修改。
2.c编译时函数名修饰约定规则:
__stdcall调用约定:
(1)从 "? "识别函数名的开头,后面跟着函数名;
(2)与"@ @ YG amp;"在函数名后标记参数表的开头,后面跟着参数表;
(3)参数表用代号表示:
X - void,
d字符,电子无符号字符,
F - short,
H - int,
I -无符号整数,
j龙,
K -无符号长整型,
m浮动,
n倍,
_N - bool,
....
PA -表示指针,后面的代码表示指针类型。如果同一类型的指针连续出现,它将被替换为 "0 ",以及a "0 "将被替换。
表格重复一次;
(4)参数表中第一项是函数的返回值类型,后面是参数的数据类型,指针标记在它所引用的数据类型之前;
(5)全称的末尾标有 "@ Z "参数表后。如果函数没有参数,它以 "z "。
格式是 "?姓名@ @ yg * * * * @ z "or "?函数@ @ yg * xz "比如说
int Test1(char *var1,unsigned long) -&";?Test1@@YGHPADK@Z &";
void Test2() -&";?Test2@@YGXXZ &";
__cdecl调用约定:
It 与上面的_stdcall调用约定相同,只是参数表的起始标识符从 "@ @ YG amp;"以上为 "@ @ YA "。
__fastcall呼叫约定:
它与规则上面的_stdcall的调用约定相同,只是参数表的起始标识符从 "@ @ YG amp;"以上为 "@ @ YI "。
VC函数的默认声明是 "_ _ cedcl ",只能由C/C调用。
该函数立即调用执行模式。
2.
通过构造函数创建一个对象,然后调用自己的方法。
3.
通过构造函数调用函数。
本文名称:c语言如何使用定义函数?(c语言函数如何调用一串字符?)
当前地址:http://www.shufengxianlan.com/qtweb/news8/247208.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联