Chap15 函数1

preview
需积分: 0 0 下载量 97 浏览量 更新于2022-08-08 收藏 23KB DOCX 举报
在C语言中,函数是程序的基本构建块,用于封装可重用的代码段。C语言是一种面向函数的语言,它的程序实质上是由多个函数组成的集合,每个语句都属于且仅属于一个函数。程序的执行总是从`main`函数开始,这是程序的入口点。在`main`函数中,我们可以调用其他函数,这些被调用的函数又可以进一步调用更多的函数,形成嵌套调用,但最终控制权会返回到`main`函数,当`main`函数执行完毕,整个程序也就结束了。 函数声明,也称函数原型,是告诉编译器函数名称、返回值类型以及参数列表的结构。一个没有返回值的函数,其返回值类型应声明为`void`。函数的命名遵循标识符规则,可以采用帕斯卡命名法、骆驼式命名法或下划线法。函数声明的括号内描述了函数需要的参数类型和顺序,即使不提供参数名称,只需参数类型即可。无参数的函数声明括号内为空。在函数调用时,传递给函数的值被称为实参,而在函数定义中接收的参数被称为形参。调用者内部的局部变量对于被调用函数是不可见的,确保了数据的安全性。 `return`语句用于从函数中返回一个值,返回的值必须与函数声明的返回类型相匹配。如果一个有返回值的函数没有显式的`return`语句,那么最后一个执行的表达式的值会被作为返回值返回给调用者。函数定义可以在调用之前,也可以在之后,但为了编译顺利,通常建议在调用前先声明函数。 在C语言中,函数调用的参数传递是通过调用者将参数值压入栈中进行的。如果参数数量超过四个,DLX架构会将超出部分的参数存储在内存的栈帧(或活动记录)中,利用运行时栈机制。每次函数调用,编译器会在内存中为局部变量分配空间,并在函数返回时回收。这样的设计支持了函数的递归调用。 在DLX处理器中,R29作为栈指针,R30作为框架指针,它们帮助管理函数调用时的栈操作。动态链接涉及到调用者的框架指针副本的创建。叶函数是指那些在执行过程中不调用其他函数的函数,并且不改变R31寄存器的值。 头文件包含了函数的声明、预处理宏,但不包含实际的库函数源代码。例如,数学库函数的声明在`math.h`头文件中。`printf`和`scanf`函数是常用的输入输出函数,`printf`若格式说明少于参数,可能会使用内存中未初始化的值,而`scanf`返回成功扫描的格式说明个数。C语言函数调用在DLX汇编语言中表现为一系列的寄存器操作,如参数传递、局部变量的存储和恢复等。 理解和掌握C语言中的函数机制,包括函数声明、参数传递、返回值管理以及函数调用的底层实现,对于编写高效且可靠的C程序至关重要。通过熟练运用这些知识,可以更好地组织代码,提高代码的可读性和复用性。