ccidnet????

出版日期:1997-10-27 总期号:681 本年期号:41

本期导读
综合要闻
网络通信
市场商情
国际文摘
技术专题
软件应用
对foxpro中return语句的重新认识

刘胜娃

  在foxpro的程序编制中,大多数编程人员认为return语句是可有可无的语句,因为该语句一般位于子程序(后缀是.prg的程序)的最后一行,有时忘记了写入该语句,但程序还是正常返回到上一级程序,表现得跟有return语句时一模一样,但笔者通过一次编程过程中错误的排除,对return语句的重要性有了新的认识,现预以介绍,以免同行犯同样的错误。

  1.foxpro中return语句使用方法

  语法:return[ΙexprΛ tomaster toΙprogramnameΛ]

  含义:将程序控制返回到调用程序。

  2.程序错误排除及分析

  用屏幕编辑器和命令编辑器编制了程序a.spr、b.prg和c.spr等程序,其调用过程如下(箭头为程序调用方向):

  

  现象一:a.spr(主菜单)调用b.prg,同时将a.spr之窗体清除,b.prg调用c.spr后,没有返回到b.prg程序,而直接调用a.spr(循环调用)。第一遍调用时一切运行正常,但当主菜单(a.spr)第二次激活调用b.prg时,系统出现:noparameterstatementfound的错误提示。

  分析与解决:重新检查各程序正确无误,单独调试各程序均运行正常。经多方调试才发现第一次调用的b.prg和c.spr在第二次调用时没有及时在内存中消除,只是相当于suspend(挂起)过程。针对这种情况,在程序中加入清除内存变量等一系列语句,均告失败。将c.spr程序中的直接调用a.spr改为returntob.prg,再在b.prg中调用a.spr,运行程序似乎一切正常。

  现象二:当这种循环调用进行了6次之后,系统又出现了toomanyreadsineffect之错误提示。

  分析与解决:根据这种错误提示的代码,在程序中加入clearread、cleargets等一系列语句,均无效。遂修改b.prg中的调用a.spr为return语句,经多方测试程序均运行正常,问题得以解决。

  3.结论

  ①虽然return语句用法简单,但其在计算机内部的执行是相当复杂的,牵扯变量的堆栈调用。

  ②程序编制中,有时出现一些引起误解的错误提示,应正确分析这些假现象,才能尽快解决问题。

  ③不应忽视foxpro中简单语句的作用,应确切理解这些语句的深层次用法,在程序编制中将会起到事半功倍的效果。