コマンドライン引数
実行時に、コマンドラインから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.