2017-02-28 10 views

答えて

6

短い答えACTGRP(*New)が設定されていない限り
はありません、彼らは、再初期化されませんか、あなたには、いくつかの他の方法で起動グループを再利用します。 (プログラムがアンロードされていない以外)

ロング回答 *INLRは、限り、あなたはサイクルメインプログラムを使用しているとして、RPGサイクルのではなく、アクティベーショングループの関数であり、そして予想通り、ほとんど機能しなければなりません。線形メインプログラムの場合、すべてのベットはオフです。このマニュアルでは、線形モジュールでサイクルに依存するフィーチャが「指定できない」と記載されています。このドキュメントでは、リニアモジュールで*INLRが期待どおりに機能しないことを直接的には示していませんが、*INLRがサイクルに結びついており、そのリニアモジュールにサイクルが含まれていないことを知る必要があります。リニアモジュールは、MAINまたはNOMAINキーワードを使用するモジュールです。ちなみに、変数の初期化だけでなく、(あるいはその代わりに)LRを制御することもあります。

ACTGRP(*NEW)を使用すると、プログラムの起動時に新しいアクティベーショングループが作成され、プログラムの終了時に暗黙的に終了します。したがって、プログラムは、LRがオンであるかオフであるか、またはプログラムがサイクルメインプログラムであるかリニアメインプログラムであるかにかかわらず、いつでも終了する。

アクティブ化グループまたはACTGRP(*CALLER)を使用し、呼び出し側が名前付き活動化グループで実行していて、活動化グループ内のすべてのプログラムが終了したときに手動で活動化グループを再要求すると、フィールドが初期化されます。 RCLRSCはここでは何の影響もありません。

デフォルトのアクティブ化グループ、つまりACTGRP(*CALLER)を使用し、呼び出し元がデフォルトのアクティブ化グループで実行されていて、手動でRCLRSCを実行している場合は、フィールドが初期化されます。 RCLACTGRPはここでは何の影響もありません。これは問題を引き起こす可能性があるので注意してください。

最後に、これはグローバルスコープ内の変数にのみ適用されます。サブスコープ内で定義されたローカルスコープ変数は、静的変数として定義されていない限り、常にエントリ時に初期化され、リターン時に解放されます。静的ローカル変数はグローバル変数のように動作します。つまり、プロシージャの最初の呼び出し時に割り当てられ、初期化され、呼び出しをまたいで存続します。

+0

詳細な回答は@jmarkmurphyありがとうございます。 inz宣言で変数を初期化するとどうなりますか?プログラムが呼び出されるたびに、または初めてメモリにロードされるときにこの値に設定されますか?私。 inz宣言が最後の呼び出しの値を上書きするか、前の呼び出しの値が保持されますか? – mike

+1

同じ答え。 'Inz'は、プログラムが初期化されたときに、その変数が何を初期化するかを決定します。 – jmarkmurphy

+0

あなたの答えは、私が活性化グループについて読んでいると思います。しかし、デバッグをやめると、テストハーネスから繰り返し呼び出され、プログラムが実行されるたびに変数を再初期化します。プログラムは、指定された活動化グループで実行されます。コードはモジュール内にあり、ターゲット・リリースV7R1M0でコンパイルされます。私は変数を再初期化していることを知るために何ができるのかよくわかりません。 – mike

2

リニアー・メイン・モジュールは、グローバル変数に関するノミネート・モジュールのように動作します。グローバル変数は、プロシージャがモジュールで最初に呼び出されたときに初期化され、決して再初期化されません。 https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/cycvslinear.htm

+0

私たちの議論に貢献していただき、ありがとうございます。これは、私が「線形主モジュール」という言葉に出会った初めてのことです。あなたが提供したリンクを研究することに興味があります。 – mike

関連する問題