在学习C语言编程时,总会提到C是面向过程编程,与面向对象编程对应的。面向过程编程老是显得低人一等,须要控制程序执行的每一个过程,面向对象编程,只要实现了类以后,调用很是方便同样。在C++的发展下,C好像愈来愈不入流了,更不用说C指针的各类问题,内存泄漏和越界访问数据,这一切好像只有在C语言中才存在。可是C++也是存在的,做为C的超集语言,C++最大的问题就是太完备了,太复杂了,这一切的一切就是可能须要几年才能真正入门C++。在Java和Python的比较下,C也是有本身优点的,能够面向硬件编程,控制程序执行的每个过程,接近汇编语言的效率,和汇编语言的零距离融合,内链函数的应用,bootloader的应用,驱动程序的编写,嵌入式设备的兴起,物联网的崛起、工业革命这一切都是C的契机,没法想象,没有C语言,生活会变成什么样子,所以C语言仍是值得学的。编程
学习C语言的都知道,C语言的核心之一就是函数,函数包括函数签名和函数体。数组
1、函数的签名与函数体:函数签名--函数的类型、函数的名称、函数的参数列表模块化
一、函数的类型:函数的返回值类型,能够是基本类型或符合类型,也能够是void类型(表示没有返回值);函数
二、函数的名称:标识符经常用动名结构的短语,能代表函数的功能最好,不要和已有的函数重名便可;学习
三、函数的参数列表:能够在调用函数时传入的参数,参数列表包括传入参数的类型和传入参数的顺序;测试
四、函数体:本质是语句块,完成代码的初级封装,决定了变量的做用域和程序的执行时序;优化
2、函数的接口化,将一个功能用一个头文件和实现模块化:指针
一、将数据定义和函数声明放置到头文件中;对象
二、在头文件中说明函数的功能、函数的调用方法、函数的传参要求和函数的错误代码,便于用户使用该模块;递归
三、在模块对应的实现文件中包含模块的头文件,方便数据的应用;
四、实现对应函数的功能,建议函数不要超过2×24=48行代码,逻辑必须简单也能够;
五、有条件时应该附上测试函数的应用及测试方法等;
六、函数没有返回值也能够调用return语句,若是没有ruturn语句,在碰到}后,编译器会执行返回语句;
七、函数实现过程当中,尽可能避免Dead Code(永远都没法执行的代码);
八、函数实现过程当中,不该该出现大量重复代码,不然,应该抽象出一个函数封装重复代码;
3、函数的调用,除了main()由系统调用外,其余函数原则上都是有main函数调用的;
一、调用没有返回值的函数,一般用来实现数据的输出或程序状态的改变,无需返回值,直接functionName(实参);
二、调用有返回值的函数,需定义与函数类型相同的变量,完成函数返回数据的接受工做,type typeData = functionName(参数);
三、调用函数原则上只能有一个返回值,若是须要返回多个函数,能够考虑返回指针、数组或符合类型等;
四、调用函数时传入的实参的类型和顺序及数量必须与形参彻底一致;
五、经过调用函数,实现程序执行细节和数据操做的动做隐藏;
4、增量式开发,实现代码从零开始到功能实现的过程:
一、模块划分,复杂功能分割成小功能的模块,最终到只须要简单几个语句就能完成功能的小模块便可;
二、功能具体化;
三、搭建函数的实现模板;
四、填充必要的代码实现;
五、实现代码功能的测试,若是功能正常,则代码实现正常;
六、代码测试功能不正常,引入临时变量并添加附加的语句,实现数据的监控,修改必要代码,直至代码功能正常;
七、将附加语句注释,保留必要核心代码便可;
八、添加必要的注释,完成代码的完善便可。
5、代码重构,主要实现代码的优化和透明化修改:
一、代码重构时,尽可能不要删除已有的实现,能够再次实现;
二、代码重构时,能够添加新的功能;
三、代码重构时应实现代码应用的透明化;
6、递归,概念自身在定义时用到概念自己,
一、递归的首要条件是基础条件;
二、递归的必须条件是递归方法;
三、递归的必要条件是递归规模减少的方法;