Objective-c-command-line-arguments

提供:Dev Guides
移動先:案内検索

コマンドライン引数

実行時にコマンドラインからObjective-Cプログラムにいくつかの値を渡すことができます。 これらの値は*コマンドライン引数*と呼ばれ、特にコード内でこれらの値をハードコーディングする代わりに外部からプログラムを制御する場合、プログラムにとって重要です。

コマンドライン引数はmain()関数の引数を使用して処理されます。 argc は渡された引数の数を指し、 argv [] はプログラムに渡された各引数を指すポインター配列です。 以下は、コマンドラインから提供された引数があるかどうかをチェックし、それに応じてアクションを取る簡単な例です-

#import <Foundation/Foundation.h>

int main( int argc, char *argv[] ) {
   if( argc == 2 ) {
      NSLog(@"The argument supplied is %s\n", argv[1]);
   } else if( argc > 2 ) {
      NSLog(@"Too many arguments supplied.\n");
   } else {
      NSLog(@"One argument expected.\n");
   }
}

上記のコードをコンパイルして、「testing」などの1つの引数で実行すると、次の結果が生成されます。

2013-09-13 03:01:17.333 demo[7640] The argument supplied is testing

上記のコードが、testing1とtesting2などの2つの引数を使用してコンパイルおよび実行されると、次の結果が生成されます。

2013-09-13 03:01:18.333 demo[7640] Too many arguments supplied.

引数を渡さずに上記のコードをコンパイルして実行すると、次の結果が生成されます。

2013-09-13 03:01:18.333 demo[7640] One argument expected
*argv [0]* はプログラム自体の名前を保持し、 *argv [1]* は指定された最初のコマンドライン引数へのポインターであり、* argv [n]は最後の引数であることに注意してください。 引数が指定されない場合、argcは1になります。引数が1つ渡されると、 *argc* は2に設定されます。

すべてのコマンドライン引数をスペースで区切って渡しますが、引数自体にスペースがある場合は、二重引用符 ""または単一引用符 で囲んで引数を渡すことができます。 上記の例をもう一度書き直して、プログラム名を出力し、二重引用符で囲んでコマンドライン引数を渡します-

#import <Foundation/Foundation.h>

int main( int argc, char *argv[] ) {
   NSLog(@"Program name %s\n", argv[0]);

   if( argc == 2 ) {
      NSLog(@"The argument supplied is %s\n", argv[1]);
   } else if( argc > 2 ) {
      NSLog(@"Too many arguments supplied.\n");
   } else {
      NSLog(@"One argument expected.\n");
   }

   return 0;
}

上記のコードを、スペースで区切られた単一の引数を使用してコンパイルおよび実行しますが、二重引用符で囲んで「Testing1 Testing2」と言うと、次の結果が生成されます。

2017-11-30 06:36:59.081 main[71010] Program name main
2017-11-30 06:36:59.082 main[71010] One argument expected.