4

コマンドラインパラメーターを出力する簡単なプログラムを作成しました。

コードは以下のとおりで、実行可能ファイル (TEST.EXE) を作成しました。

int main(int argc, char *argv[])
{
    int i;
    printf("%s\n",argv[0]);
    for (i = 1;  i < argc;  i++)
       printf("argument %d: %s\n", i, argv[i]);
    exit (EXIT_SUCCESS);
}

TEST.EXE を実行してパラメータを出力しようとしましたが、失敗しました。

コマンドの結果RUN TEST.EXE test1 test2:

%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters

「test1」と「test2」を印刷するにはどうすればよいですか?

4

3 に答える 3

8

このRUNコマンドは、コマンド ライン引数をサポートしていません。外部コマンドを定義し、代わりにそれを使用してください。David Mathog の初心者向け FAQから:

プログラムを開始するにはどうすればよいですか?

  • 方法 2: 次RUNのコマンド を使用します。

    $ run program_nameNo command line arguments allowed

  • 方法 3: 外部コマンドを定義して実行します。次の例では、 はプログラムの場所に相当する論理名です。

    $ new_command :== $where:program_name $ new_command [command line arguments]

于 2016-02-21T06:45:54.370 に答える
4

'a3f' に従って外部コマンドを定義することは、やや面倒で 2 段階の手順を踏むことになりますが、それを行うための '適切な' 方法です。

MCR の「トリック」を試すこともできます。MCR は、40 年以上前の PDPD-11 オペレーティング システム RSX の Monitor Command Routine の略です。

現在、MCR はデフォルトで SYS$SYSTEM でプログラムを検索するため、現在の場所を指定する必要があります。

$ MCR dev:[dir]TEST this is a test.

DCL$PATH を使用した 1-1/2 ステップのアプローチもあります。これは Unix や Windows のパスとほとんど同じように機能し、不明なコマンドが入力された場合に DCL スクリプトまたはプログラムを探す場所を提供します。

例えば

$ DEFINE DCL$PATH SYS$DISK:[],SYS$LOGIN:,SYS$SYSTEM:

次のように入力します。TEST this.

ハイン

于 2016-02-21T19:31:22.353 に答える
3

さらに、引数の大文字と小文字を区別する必要がある場合は、これらの引数を引用するか、入力する必要があります

$ SET PROCESS/PARSE_STYLE=EXTENDED

プロセスの存続期間に 1 回、

$ DEFINE/USER DECC$ARGV_PARSE_STYLE TRUE

特定の外部コマンドまたは自動外部コマンド (DCL$PATH) を使用してプログラムを実行する前。それ以外の場合、引用符で囲まれていないすべての引数は小文字に変換されます。

PS: VMS にはコマンド言語があります。つまり、プログラムを実行するにはコマンドを入力する必要があります。デフォルトでは、ファイル名はコマンドではありません。DCL$PATH を定義すると、このデフォルトの動作が変更されます。

于 2016-02-21T21:05:02.777 に答える