Linux C编程一站式学习笔记——第六章

来源:互联网 发布:那个软件看寅唱会 编辑:程序博客网 时间:2024/05/20 07:17

机器语言称为第一代语言(1GL,1st Generation Programming Language),汇编语言称为第二代语言(2GL,2nd Generation Programming Language),C、C++、Java、Python等可以称为第三代语言(3GL,3rd Generation Programming Language)。目前已经有了4GL(4th Generation Programming Language)和5GL(5th Generation Programming Language)的概念,主要区别在于,4GL以后的语言主要不是通过输入、输出、基本运算、测试分支和循环这些基本指令来编程的,4GL以后的语言更多是在描述要做什么(Declarative)而不是描述具体一步一步怎么做(Imperative),具体一步一步怎么做完全交由编译器或解释器决定。

函数式编程(Functional Programming)
命令式编程(Imperative Programming)


int factorial(int n){int result = 1;while (n > 0) {result = result * n;n = n-1;}return result;}int factorial_Recursive(int n){if (n == 0)return 1;else {return n * factorial_Recursive(n - 1);}}


在整个递归调用过程中,虽然分配和释放了很多变量,但是所有的变量都只在初始化时赋值,
没有任何变量的值发生过改变,而上面的循环程序则是通过对n和result这两个变量多次赋值来达到同样目的的。前一种思路称为函数式编程(Functional Programming),而后一种思路称为命令式编程(Imperative Programming),这个区别类似于第 1 节 “程序和编程语言”讲的Declarative和Imperative的区别。


全局变量被多次赋值会给调试带来麻烦,如果一个函数体很长,控制流程很复杂,那么局部变量被多次赋值也会有同样的问题。此外,以后我们会讲到,对全局变量多次赋值会影响代码的线程安全性。因此,不要以为“变量可以多次赋值”是天经地义的,很多编程语言都在避免Imperative的方式,例如Erlang语言规定变量的值不允许改变。用C语言编程主要还是采用Imperative的方式,但是要记住,为变量多次赋值时要格外小心,在代码中多次读写同一变量应该以一种一致的方式进行,至于什么才算是“一致的方式”很难定义,也有个人风格的因素,需要读者在编程中自己体会。



原创粉丝点击