首页编程语言c语言编程100例讲解

c语言编程100例讲解

cysgjjcysgjj时间2024-09-27 18:45:28分类编程语言浏览28
导读:C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?一般a=fun(),函数执行后,返回值在寄存器,立码是个赋值运算,把值从寄存器或寄存器指向的栈空间复制到变量的内存空间。(返回结……...
  1. C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?

C语言中,函数返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?

一般a=fun(),函数执行后,返回值在寄存器,立码是个赋值运算,把值从寄存器或寄存器指向的栈空间***到变量的内存空间。(返回结构比较复杂)但都不是啥要注意的。一般说法也不是返回main,是返回调用

简单的说:

  • 函数的返回值在函数返回时有效

    c语言编程100例讲解
    图片来源网络,侵删)
  • 函数内的局部变量,退出函数时立刻失效

相应的,要注意:

  • 不要期望在函数外访问函数的局部变量:例如在函数中定义局部数组,并将数组指针返回调用者,这一指针在返回时已经失效,很可能指向其它数据

    c语言编程100例讲解
    (图片来源网络,侵删)
  • 若需要从函数中获取较多、较复杂的数据,可通过传递指针参数的方式实现:例如C库函数中的sprintf

根据所用编译器和CPU的不同,以及返回值数据类型的不同,C语言中的函数返回值可能通过寄存器传递,也可能通过栈传递。对大多数CPU和编译器来说,出于性能考虑,能使用寄存器传递的,尽量使用寄存器传递,只有当寄存器不够用的时候,才会通过栈传递。

针对这两种情况,我分别举个x64 + GCC环境下的例子来说明。

c语言编程100例讲解
(图片来源网络,侵删)

下图中的一段简单的代码,返回值是一个有符号整数类型

我们看下x64/GCC下面对应的汇编代码:

test函数中的

1129: mov $0x2,%eax

便是把返回值2存放到eax寄存器中。而main函数中的

113d: callq 1125 <test>

1142: mov %eax,-0x4(%rbp)

则先调用test函数,然后把返回值从eax中取出,并存放到rbp - 4的地址处,也就是赋值给局部变量a。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。转载请注明出处:http://www.wnpsw.com/post/19905.html

函数返回寄存器
编程专业哪个语言好 移动与互联网技术,移动与互联网技术工资待遇