多くの C++ IDE およびコンパイラでは、メイン関数が生成されると、次のようになります。
int main(int argc, char *argv[])
IDE を使用せずにコマンド ライン コンパイラのみを使用して C++ をコーディングする場合は、次のように入力します。
int main()
パラメータなし。これは何を意味し、私のプログラムにとって不可欠なのですか?
多くの C++ IDE およびコンパイラでは、メイン関数が生成されると、次のようになります。
int main(int argc, char *argv[])
IDE を使用せずにコマンド ライン コンパイラのみを使用して C++ をコーディングする場合は、次のように入力します。
int main()
パラメータなし。これは何を意味し、私のプログラムにとって不可欠なのですか?
argv
とC および C++ でargc
コマンド ライン引数を渡す方法です。main()
argc
が指す文字列の数になりますargv
。事実上すべての実装がプログラムの名前を配列の前に追加するため、これは (実際には) 1 に引数の数を加えたものになります。
変数には、慣例によりargc
(引数カウント) およびargv
(引数ベクトル) という名前が付けられますが、任意の有効な識別子を指定できます:int main(int num_args, char** arg_strings)
も同様に有効です。
int main()
コマンドライン引数を処理するつもりがない場合は、完全に省略して を生成することもできます。
次のプログラムを試してください。
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Have " << argc << " arguments:" << std::endl;
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << std::endl;
}
}
で実行する./test a1 b2 c3
と出力されます
Have 4 arguments:
./test
a1
b2
c3
argc
は、コマンド ラインからプログラムに渡される引数の数であり、引数argv
の配列です。
次のように、引数の数を知って引数をループできます。
for(int i = 0; i < argc; i++)
{
// argv[i] is the argument at index i
}
sh
次のように (構文
を使用して) プログラムを実行するとします。
myprog arg1 arg2 'arg 3'
main を として宣言した場合int main(int argc, char *argv[])
(ほとんどの環境で)、次のmain()
ように呼び出されます。
p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));
ただし、メインを として宣言するとint main()
、次のように呼び出されます。
exit(main());
引数が渡されません。
さらに 2 つの注意事項があります。
main
。特定のプラットフォームが追加の引数または別の戻り値の型を受け入れる場合、それは拡張機能であり、移植可能なプログラムで依存するべきではありません。*argv[]
とはまったく同じなので、 のよう**argv
に書くことができます。int main(int argc, char *argv[])
int main(int argc, char **argv)
プログラムの開始時にプログラムに提供されたコマンド ライン パラメータをmain
表すパラメータ。argc
パラメータは、コマンド ライン引数の数を表し、コマンド ラインで提供char *argv[]
される個々の引数を表す文字列 (文字ポインタ) の配列です。
int main();
これは簡単な宣言です。コマンドライン引数を取ることはできません。
int main(int argc, char* argv[]);
この宣言は、プログラムがコマンドライン引数を取る必要がある場合に使用されます。そのように実行すると:
myprogram arg1 arg2 arg3
argc
、または Argument Count は 4 (4 つの引数) に設定され、argv
、または Argument Vector には、"myprogram"、"arg1"、"arg2"、および "arg3" への文字列ポインターが設定されます。プログラム呼び出し ( myprogram
) が引数に含まれています!
または、次を使用できます。
int main(int argc, char** argv);
これも有効です。
追加できる別のパラメーターがあります。
int main (int argc, char *argv[], char *envp[])
envp
パラメータには環境変数も含まれます。各エントリは次の形式に従います。
VARIABLENAME=VariableValue
このような:
SHELL=/bin/bash
環境変数リストは null で終了します。
重要: !の呼び出しで、argv
またはenvp
値を直接使用しないでください。悪意のあるユーザーが環境変数をコマンドライン コマンドに設定し、(潜在的に) 大規模な損害を引き起こす可能性system()
があるため、これは大きなセキュリティ ホールです。一般に、使用しないでくださいsystem()
。ほとんどの場合、C ライブラリを介して実装されたより優れたソリューションがあります。
main
関数には と の 2 つのパラメーターを指定できargc
ますargv
。argc
は整数 ( int
) パラメーターであり、プログラムに渡される引数の数です。
プログラム名は常に最初の引数であるため、プログラムには少なくとも 1 つの引数があり、最小値は1 にargc
なります。しかし、プログラム自体に 2 つの引数がある場合、 の値はargc
3 になります。
パラメーターargv
は文字列配列を指し、引数 vectorと呼ばれます。これは、関数の引数の 1 次元文字列配列です。
The first parameter is the number of arguments provided and the second parameter is a list of strings representing those arguments.
両方の
int main(int argc, char *argv[]);
int main();
C または C++ プログラムのエントリ ポイントの正当な定義です。Stroustrup: C++ Style and Technique FAQ では、メイン関数で可能な、または正当ないくつかのバリエーションについて詳しく説明しています。