之前發現程式怪怪的
大家覺得底下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.
全站熱搜