编程入门之函数理解

  在学习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、递归,概念自身在定义时用到概念自己,

  一、递归的首要条件是基础条件;

  二、递归的必须条件是递归方法;

  三、递归的必要条件是递归规模减少的方法;

相关文章
相关标签/搜索