之前發現程式怪怪的

大家覺得底下D1跟D2會是多少

DATA: D1(10) VALUE '12345'.
DATA: D2(10) VALUE 'ABCDE'.

PERFORM CHGDAT USING D1 CHANGING D2.


WRITE: D1.
WRITE: D2.

FORM CHGDAT USING XX CHANGING YY.
XX = '11111'.
YY = 'AAAAA'.
ENDFORM.

====================================
D1 輸出111111這為什麼阿
我本來以為USING 應該只有傳遞,不會改變
那跟CHANGING有什麼不一樣

後來看到一篇文章才猛然發現

USING有兩種方式

1.Call By Value and ReturnResult

  例如:PERFORM CHGDAT USING D1.   

當子程式結束後會傳回原先外部的參數,跟CHANGING的差異在於CHANGING是外部跟內部直接共用同一個區塊記憶體執行較快

2.Call By Value

  例如:PERFORM CHGDAT USING VALUE(D1).

不會傳回外部參數,當呼叫時直接複製到另一個記憶體區塊跟原先已經脫離

所以就改成這樣就正常了

FORM CHGDAT USING VALUE(XX) CHANGING YY.
XX = '11111'.
YY = 'AAAAA'.
ENDFORM.

ROACH 發表在 痞客邦 PIXNET 留言(0) 人氣()