随笔分类 -  程序设计

浅析C语言的非局部跳转:setjmp和longjmp
摘要:作者:李恩华 写于2012.4.22日凌晨西甲国家德比之前C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大)。另外,C语言标准中还提供一种非局部跳转“no-local goto",其通过标准库<setjmp.h>中的两个标准函数setjmp和longjmp来实现。C标准库<setjmp.h>下面是K&R的《C程序设计语言(第2版 . 新版)》第232页给出的关于标准库<setjmp.h>的说明。8 非局部跳转<setjmp.h>头文 阅读全文

posted @ 2012-04-22 12:35 lienhua34 阅读(12397) 评论(3) 推荐(4) 编辑

浅谈静态作用域和动态作用域
摘要:静态作用域和动态作用域所谓的作用域就是指某段程序文本代码。一个声明起作用的那一段程序文本区域,则称为这个声明的作用域。静态作用域是指声明的作用域是根据程序正文在编译时就确定的,有时也称为词法作用域。而在采用动态作用域的语言中,程序中某个变量所引用的对象是在程序运行时刻根据程序的控制流信息来确定的。大多数现在程序设计语言都是采用静态作用域规则,而只有为数不多的几种语言采用动态作用域规则,包括APL、Snobol和Lisp的早期方言。而采用静态作用域的语言中,基本都是最内嵌套作用域规则:由一个声明引进的标识符在这个声明所在的作用域里可见,而且在其内部嵌套的每个作用域里也可见,除非它被嵌套于内部的对 阅读全文

posted @ 2012-03-10 12:16 lienhua34 阅读(17108) 评论(7) 推荐(8) 编辑

关于函数调用和尾递归的一点认识
摘要:函数调用在大多数支持块结构的程序设计语言都支持函数或者子程序(函数和子程序的区别在于函数有返回值而子程序没有,在这里我们不区分这两个概念)。在进行函数调用和从函数返回时通常由一个被称为控制栈的运行时刻栈进行管理。每一个活跃的函数在控制栈中都会有一个相对应的活动记录,有时也称为栈帧。活动记录存储着函数调用时传递的参数信息和从函数返回时返回值与控制跳转的信息。函数的活动记录需要包括下面的信息控制链(control link):指向控制栈中前一个活动记录的指针;访问链(access link):指向源程序中最近的外层块对应的活动记录,用于维护静态作用域(本文中不讨论);返回地址:函数调用结束后被执行 阅读全文

posted @ 2012-03-08 18:00 lienhua34 阅读(2877) 评论(4) 推荐(4) 编辑

可计算性与停机问题
摘要:可计算性可计算性理论明确了在理论上可计算的函数应具有的特征。那些定义在自然数集上的、理论上可计算的函数通常被称为部分递归函数。概念中强调“理论上可计算”,是因为某些可计算函数在实际计算中可能会耗费相当长的计算时间,可能在我们宇宙现存时间内都无法完成其计算。直观地说,如果存在一段程序来计算一个函数,那么这个函数就是可计算的。更明确地说,如果对于函数f: A -> B存在一个算法,以任意x∈A作为输入,都可以得到y = f(x)作为输出,则这个函数是可计算的。在20世纪30年代,普林斯顿大学的Alonzo Church提出了一个重要的原理,称为Church理论。Church理论是关于数学定义 阅读全文

posted @ 2012-03-05 22:24 lienhua34 阅读(5428) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示