函数的本质
1.程序=数据+算法;C语言=数据+函数;模块化程序设计;
目前创新互联已为近1000家的企业提供了网站建设、域名、虚拟空间、网站托管、企业网站设计、文圣网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
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.递归是数学领域中概念在程序设计中的应用
38.递归是一种强有力的程序设计方法
39.递归的本质为函数内部在适当的时候调用自身
40.C语言中递归函数必然会使用判断语句
41.递归函数在需要编写的时候定义函数的出口,否则栈会溢出
42.递归函数是一种分而治之的思想
43.不要在函数中使用全局变量,尽量让函数从意义上是一个独立的功能模块
44.参数名要能够体现参数的意义
45.如果参数时指针,且仅作输入参数用,则应在类型前加const,以防止该指针在函数体内被意外修改
46.不要省略返回类型,如果函数没有返回值,那么应声明为void类型
47.在函数体的“入口处”对参数的有效性进行检查,对指针的检查尤为重要
48.语句不可返回指向“栈内存”的“指针”,因为该内存在函数体结束时被自动销毁
49.函数体的规模要小,尽量控制在80行代码之内
50.相同的输入应当产生相同的输出,尽量避免函数带有“记忆”功能
51.避免函数有太多的参数,参数个数尽量控制在4个以内
52.有时候函数不需要返回值,但为了增加灵活性,如支持链式表达,可以附加返回值
53.函数名与返回值类型在语义上不可冲突
本文题目:函数的本质
本文链接:http://hbruida.cn/article/geheho.html