itab 和itab[]的区别

一、对于:itab 和itab[]的区别(此问题是出现在:zleswm_007练习过程中)

描述:

         在程序中:

         data: begin of itab occurs 0,

                   name  type  c,

                   age    type  i.

         data: end of itab.

 

这时我们在主程序调试过程中:

         出现这样一段代码:

 if itab is initial.

         message '找不到相应的数据' type 'S' display like 'E'.

         leave list-processing.

endif.

 

这段代码告诉我们这里只是进行一个检查,如果取不到数据,则做个提示。

 

问题:通过调试,发现前面的取数逻辑没有任何问题,走完取数逻辑后,发现有取到的数据,

          但是程序依然还会执行上述的 if。。。代码,那说明 itab 是空的???这就与前面的取值相矛盾

 

 

问题分析:itab原来是一个工作区,我们这里应当指的是 一个内表

因为根据我们之前的定义:有了occurs之后,则内表和工作区就用同一个符号来表示。所以这里应当加上一个 itab[],这样就表示的是内表体。

 

总结:这个问题告诫我们:在定义内表的时候尽量不要使用 occurs(直接定义一个带有表头行的列表),避免后面使用的时候因为重名而造成的错误,这种错误在出现的时候,只能通过调试才能发现,因为它会通过编译。

 

所以我们:通常定义的方法是:

data: begin of it_tab,

         name  type  c,

         age    type  i,

         end of it_tab.

data: ih_tab  type it_tab.

data: itab  type table of it_tab.

posted @ 2014-06-21 16:29  林中白狼-LBG  阅读(761)  评论(0编辑  收藏  举报