コマンドライン引数

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

コマンドライン引数は、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");
   }
}

上記のコードをコンパイルして、「テスト」などの単一の引数を使用して実行すると、次の結果が生成されます。

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

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

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.