回答
這是一個有趣的問題......它通常很明顯。
我想快速回答是複印書不會包含不同類型的規格。 RPG IV程序可以有H,F,D,I,C,O和P規格,或者它們的自由形式等價物。 (規格類型由固定格式源的第6列中的字母確定)。順序很重要,你不能混合這些類型。如果您正在查看僅有一種規格的源代碼,則可能將其設計爲副本。由於可執行代碼包含在C(計算)和/或P(過程)規格中,因此沒有C或P規格的源代碼是副本。雖然在字帖中使用C或P規格通常是不好的做法,但RPG確實允許它,並且我已經看到它完成了。但是,複印本中唯一的東西是C或P規格。
編輯你可以有例如˚F& d規範一個字帖,但它可以被包含在兩個地方,d規範之前,是在一個程序中的F規格的結束。您可以使用一個使用編譯器指令/IF DEFINED
的副本來控制該副本的哪一部分包含在哪裏。
EDIT2原來,IBM增加了在7.1和更高版本中混用F & D規格的功能。只有F & D規格的源成員將是一本習字簿所以簡短的回答就變成了,具有定義(H,F,D,I,O)規格和可執行文件(C & P)規格的源成員被設計爲編譯。
較長的答案,一個RPG程序也有一個「主」。最初,唯一的選擇是現在稱爲「循環主」的部分。 IE瀏覽器。 「主要」過程是內置於RPG程序中的隱含生成的代碼"cycle"。
然後沿着RPG IV和ILE來。 IBM添加了控制規範關鍵字NOMAIN
。
H NOMAIN
//or in freeform
ctl-opt nomain;
這導致了一個不可執行的模塊沒有「主」程序;通常由編譯器爲「循環」生成的代碼將被忽略。產生的* MODULE對象需要與另一個提供主程序的* MODULE綁定到一個* PGM對象中。
或者可以將零個或多個其他* MODULE對象綁定到一個* SRVPGM對象中; * SRVPGM只是過程的集合。把它們想象成Windows DLL。然後IBM增加了一個「線性主」RPG IV程序的選項。
H MAIN(MYMAIN)
// or freeform
ctl-opt main(MYMAIN);
因此,主程序是您指定的任何程序。生成的「循環」代碼再次被排除在可執行文件之外。
因此,NOMAIN
或MAIN
關鍵字的存在將表明源成員被設計爲編譯;假設來源更多。有可能有一個「標準選項」包含文件,其中包括其中之一。
缺少這兩個關鍵字將表明您正在處理循環主文件或包含文件。
如果它是一個循環的主程序,它需要的參數作爲輸入,你就可以看到輸入參數列表
//Fixed format, old school RPG III, IV
C *ENTRY PLIST
C PARM LCMPNO 2
C PARM LNTACT 1
// fixed format, RPG IV using a "Procedure Interface (PI) to replace *ENTRY PLIST
D CheckDate PI
D lDateIs 4a
// free format RPG IV
dcl-pi CheckDate;
lDateIs char(4);
end-pi;
請注意,「週期主」之間源中的關鍵區別程序使用PI而不是*ENTRY PLIST
,而線性主要是線性主程序被明確的程序定義所包圍。
// linear main
h main(CHECKDATE)
p CheckDate b
d CheckDate PI
d lDateIs 4a
//do something
*INLR = *ON
return;
p CheckDate e
//cycle main with PI
d lDateIs 4a
//do something
*INLR = *ON
return;
非常整潔的答案。謝謝。 – user1578026
@ user1578026,我添加了一個編輯來涵蓋一些特殊情況,其中簡短的回答可能不太正確。 – Charles
您可能還想要注意@Barbra Morris的回答,以及對此答案的評論。 – jmarkmurphy
RPG副本的書是非常接近imports
現代編程語言
副本書應使用更象C或C頭文件++。不幸的是,它不會有那麼有用的擴展器來保持獨立。商店標準可以在這裏有所幫助。您可以將副本保存在單獨的源文件中,甚至可以將它們命名爲特定的前綴或後綴,以表明它是一本抄寫本。我在副本上看到了像_或_h這樣的後綴,其中基本名稱與作爲頭文件的源成員相同。或者,如果副本和程序源存儲在不同的源文件中,則程序和它的頭文件將具有相同的名稱。
與C一樣,RPG4可以將源文件編譯爲可以編譯爲模塊的程序和源文件(模塊是IBM i術語,非常類似於C編譯器生成的未鏈接.obj文件其他平臺)或完全鏈接可執行文件的程序。爲了將RPG源文件編譯爲完全鏈接的可執行文件,它需要一個主程序。 Charles解釋了h規格的主要和非主要關鍵字。如果程序源沒有nomain關鍵字,則可以將其作爲完全鏈接的程序生成。不過要小心,即使它不常見,h規格可能在其他地方,比如在他們自己的字帖或數據區中。
如果使用IFS,您可以使用RPGLEINC的源成員類型或.rpgleinc的後綴。 RDI編輯器支持RPGLE和RPGLEINC作爲ILE RPG。 –
- 1. 調用與本地數據區RPG程序從C#
- 2. ClearCase:主副本有什麼區別?
- 3. 分隔空格和製表符與網頁副本的區別
- 4. MongoDB中的「副本對」和「主 - 主」複製有什麼區別?
- 5. newArray = array和newArray = [數組副本]有什麼區別?
- 6. 初始化程序和副本
- 7. C和JAVA程序之間的區別
- 8. 程序和軟件的區別?
- 9. Perl中的子程序和腳本有什麼區別?
- 10. 瞭解腳本和程序之間的區別
- 11. 本地化應用程序:gnugettext和dxgettext的區別
- 12. 代碼和程序有什麼區別?
- 13. Vuforia文本識別和OCR的區別?
- 14. 應用程序域和應用程序池之間的區別?
- 15. 驅動程序和提供程序之間的區別
- 16. Web應用程序和應用程序之間的區別?
- 17. Excel Interop:應用程序和應用程序類的區別
- 18. FreeBSD調度程序和Linux調度程序的區別
- 19. 應用程序級別使用MySQL單主副本
- 20. Subversive:合併時深度'工作副本'和'遞歸'之間的區別?
- 21. Hadoop HDFS - 缺失複製副本和欠複製塊之間的區別
- 22. 遞歸運行的rpg程序
- 23. 軟件版本控制:Windows安裝程序和.Net版本的區別
- 24. 製作應用程序的副本
- 25. iPhone應用程序的多個副本
- 26. 排序ASP.NET自定義驗證程序和驗證程序的文本和ErrorMessage屬性之間的區別
- 27. MVC4中的XML和Json序列化程序之間的區別
- 28. CPP/CLI程序集和CS/VB程序集有什麼區別?
- 29. Rack應用程序和Sinatra應用程序有什麼區別?
- 30. 程序和應用程序有什麼區別?
最簡單的,甚至可能是「最快」的,是嘗試編譯它。最大的問題是你需要測試多達四個編譯器 - 例如* PGM,* MODULE,SQL * PGM和SQL * MODULE。如果失敗了,請嘗試下一個。嗯......我想也是OPM和ILE。也許在QTEMP中編譯類似OPTION(* NOSRCSTMT * NOXREF * NOGEN)的東西。 – user2338816