617

多くの C++ IDE およびコンパイラでは、メイン関数が生成されると、次のようになります。

int main(int argc, char *argv[])

IDE を使用せずにコマンド ライン コンパイラのみを使用して C++ をコーディングする場合は、次のように入力します。

int main()

パラメータなし。これは何を意味し、私のプログラムにとって不可欠なのですか?

4

8 に答える 8

772

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
于 2010-06-11T15:47:14.157 に答える
60

argcは、コマンド ラインからプログラムに渡される引数の数であり、引数argvの配列です。

次のように、引数の数を知って引数をループできます。

for(int i = 0; i < argc; i++)
{
    // argv[i] is the argument at index i
}
于 2010-06-11T15:47:19.710 に答える
20

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 つの注意事項があります。

  1. の標準で義務付けられている署名は、これら 2 つだけですmain。特定のプラットフォームが追加の引数または別の戻り値の型を受け入れる場合、それは拡張機能であり、移植可能なプログラムで依存するべきではありません。
  2. *argv[]とはまったく同じなので、 のよう**argvに書くことができます。int main(int argc, char *argv[])int main(int argc, char **argv)
于 2015-08-20T19:01:33.433 に答える
10

プログラムの開始時にプログラムに提供されたコマンド ライン パラメータをmain表すパラメータ。argcパラメータは、コマンド ライン引数の数を表し、コマンド ラインで提供char *argv[]される個々の引数を表す文字列 (文字ポインタ) の配列です。

于 2010-06-11T15:47:40.613 に答える
10
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 ライブラリを介して実装されたより優れたソリューションがあります。

于 2018-01-14T19:33:00.737 に答える
8

main関数には と の 2 つのパラメーターを指定できargcますargvargcは整数 ( int) パラメーターであり、プログラムに渡される引数の数です。

プログラム名は常に最初の引数であるため、プログラムには少なくとも 1 つの引数があり、最小値は1 にargcなります。しかし、プログラム自体に 2 つの引数がある場合、 の値はargc3 になります。

パラメーターargvは文字列配列を指し、引数 vectorと呼ばれます。これは、関数の引数の 1 次元文字列配列です。

于 2015-07-21T08:28:24.363 に答える
3

The first parameter is the number of arguments provided and the second parameter is a list of strings representing those arguments.

于 2010-06-11T15:48:03.087 に答える
1

両方の

int main(int argc, char *argv[]);
int main();

C または C++ プログラムのエントリ ポイントの正当な定義です。Stroustrup: C++ Style and Technique FAQ では、メイン関数で可能な、または正当ないくつかのバリエーションについて詳しく説明しています。

于 2010-06-11T16:00:02.713 に答える