函数的本质

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的本质相关的知识,希望对你有一定的参考价值。

1.程序=数据+算法;C语言=数据+函数;模块化程序设计;

2.面向过程是一种以过程为中心的编程思想

3.首先将复杂的问题分解为一个个容易解决的问题

4.分解过后的问题可以按照步骤一步步完成

5.函数是面向过程在C语言中的体现

6.解决问题的每个步骤可以用函数来实现

7.程序中的声明可以理解为预先告诉编译器实体的存在,如:变量,函数,等等

8.程序中的定义明确指示编译器实体的意义

声明和定义并不相同

extern int a;//声明是其他文件的变量,不需要分配空间
int a=10;//定义,分配一个空间

9.函数参数在本质上与局部变量相同,都是在栈上分配空间

10.函数参数的初始值是函数调用时的实参值

11.函数参数的求值顺序依赖于编译器的实现,C语言中大多数运算符对其操作数求值的顺序都是依赖于编译器的实现的!!!

12.程序中存在一定的顺序点

13.顺序点指的是执行过程中修改变量值的最晚时刻

14.在程序达到顺序点的时候,之前所做的一切操作必须反映到后续的访问中

15.每个完整表达式结束时

16.&&,||,?;以及逗号表达式的每个运算对象计算之后

17.函数调用中对所有实际参数的求值完成之后(进入函数体之前)

18.C语言会默认没有类型的函数参数为int

19.C语言中可以定义参数可变的函数

20.参数可变函数的实现依赖于stdarg.h头文件

21.va_list变量与va_start,va_end和va_arg配合使用能够访问参数值

22.可变参数必须从头到尾按照顺序逐个访问

23.参数列表中至少要存在一个确定的命令参数

24.可变参数宏无法判断实际存在的参数的数量

25.可变参数宏无法判断参数的实际类型

26.va_arg中如果指定了错误的类型,那么结果是不可预测的

27.宏是由预处理器直接替换展开的,编译器不知道宏的存在

28.函数是由编译器直接编译的实体,调用行为有编译器决定

29.多次使用宏会导致程序代码量增加

30.函数是跳转执行的,因此代码量不会增加

31.宏的效率比函数要高,因为是直接展开,无调用开销

32.函数调用时会创建活动记录,效率不如宏

33.宏的效率比函数稍高,但是其副作用巨大,容易出错

34.函数存在实参到形参的传递,因此无任何副作用,但是函数需要建立活动形象,效率受影响

35.宏参数可以是任何C语言实体,宏编写的_MIN_参数类型可以是int,float等等,宏的参数可以是类型名。

36.活动记录是函数调用时用于记录一系列相关信息的记录

临时变量域:用来存放临时变量的值,如K++的中间结果

局部变量域:用来存放函数本次执行中的局部变量

机器状态域:用来保存调用函数之前有关机器状态的信息,包括各种寄存器的当前值和返回地址等

实参数域:用于存放函数的实参信息

返回值域:为调用者函数存放返回值

37.


以上是关于函数的本质的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

VSCode自定义代码片段——声明函数

VSCode自定义代码片段8——声明函数

javaSE_07_方法

Objective-C Block与函数指针比较

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销