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.