情况1:
FC1和FC2都是被OB1调用,处于同一等级,FC1执行完好,FC1原来使用的临时变量区域又被分配给FC2了,但这个区域并没有被清除,所以在FC2里得到了FC1里临时变量的值。
而FC3是被OB35调用,OB1和OB35不是同一个优先级别,它们分配的临时变量区域是独立的互不影响,所以FC3里的临时变量没有变化。
情况2:
版主笔误了,结果没写出来,应该是和情况1一样
区别在于有没有在Temp里定义临时变量,根据前面的测试,可以这样理解,直接在Temp里定义临时变量是显示定义,使用LW0这样相当于隐式定义。
情况3:
如果在FC1里再定义一个LW2,那么MW10又可以得到FC1里LW0的值了,经过多次测试发现,为FC分配临时变量区域,首先为块调用分配堆栈(V区属于块调用堆栈),调用FC至少分配一个字,调用FB分配3个字,然后分别本块里定义的L区变量(包含显式、隐式定义),最后分配下一级块的临时变量。
以下是FC1、FC2被OB1调用,FC2调用FC3的测试

当FC1分配的临时变量区域大于FC2分配的区域时,FC1使用过的临时变量区域除去重新分配给FC2剩下的就分配给了下一级的FC3了,这时FC3就有可能得到FC1里临时变量的值。

分析结果:
1.临时变量是谁的零时变量
临时变量最上层是属于OB组织块的,下层程序块根据调用结构分配
2.临时变量的分配原则
分配原则:首先为块调用分配块接口堆栈,然后从临时变量最高地址依次分配块里定义的临时变量,最后分配下一级的临时变量。