Chinaunix首页 | 论坛 | 博客
  • 博客访问: 348050
  • 博文数量: 90
  • 博客积分: 847
  • 博客等级: 准尉
  • 技术积分: 1373
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-02 10:54
个人简介

跌打滚爬中的小菜鸟...

文章分类

全部博文(90)

文章存档

2015年(5)

2013年(47)

2012年(38)

我的朋友

分类: 其他UNIX

2013-09-19 13:50:16

0001.00 Dn1               S              5s 0 inz(0)          
0002.00 DProc1            PR                  ExtProc('Proc1')
0003.00  /free                                                
0004.00   Dow 1=1;                                            
0005.00     Eval n1=n1+1;                                    
0006.00     Callp Proc1();                                    
0007.00   Enddo;                                              
0008.00  /end-free                                            
0009.00                                                      
0010.00 PProc1            B                                  
0011.00 DProc1            PI                                  
0012.00  /free                                                
0013.00   Dsply ('n1='+%char(n1));                            
0014.00   if n1 = 3;                                          
0015.00     Eval *inlr=*on;                                  
0016.00     Return;                                          
0017.00   endif;                                              
0018.00  /end-free                                            
0019.00 PProc1            E                                  
上面的程序会无限运行下去的.
用debug调试可发现当n1=3时, if语句确实会被执行, 但Return后程序是返回到subprocedure的 PProc1 E语句, 这也就是为何程序不会被结束.

所以程序的出口代码必须要在main procedure中, 并且必须在特定情况下可被执行, 否则程序就是个死循环.

另外, 这个例子也说明了, subprocedure是可以直接访问main procedure中D表定义的变量的.
阅读(1320) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~