2013-01-03 34 views
2

我在看一些舊的程序,其中,如下面的代碼中發現:*在RPG INLR和而(真)

C/free 
    Dow 1=1; 
     SubRoutine(); 
    EndDo; 
    *INLR = *On; 
/end-free 

有問題的程序是一個類似服務器的程序,其子例程通過網絡處理傳入的請求。對我來說,* INLR = * On聲明似乎沒有效果,但是再一次,我對RPG的知識受到嚴重限制,而且這種模式在我看到的幾個程序中重複出現。

我的問題是這樣的:最後一行是/無結果,因此是多餘的?

+0

我傾向於同意(儘管我對RPG的知識也很少)。看起來只有在1!= 1時才能達到。 – mcalex

回答

4

你是對的,在示例中,如圖所示,沒有正常的方式來退出這個循環。看來這個程序只會從錯誤或作業取消中結束。在主DOW中檢查%shutdown()有時更好,以允許永不結束的工作優雅地關閉,但在這種情況下,這可能沒有被選擇或沒有被想到。

我可能會推測程序是通過複製另一個來編寫的,並且* INLR行可能已經作爲標記結尾的常規方式留在代碼中。所以有人可能會爭辯說,這條線是無害的,可以讓它更容易理解,這就是結局。

+4

當RETURN或RP在詳細計算結束時(通過文件末尾或SETON)結束時,RPG程序的「結束」。如果編譯器沒有檢測到其中的一個,編譯器將終止並出現RNF7023錯誤 - 「編譯器無法確定程序如何結束。」 –

+1

我同意巴克。該行可能是爲了安撫編譯器。 –

+0

是的,他們也可以做。 – WarrenT