web-dev-qa-db-ja.com

int main(int argc、char ** argv)

重複:
mainの適切な宣言は何ですか?

このmain関数の引数とはどういう意味ですか?彼らは私たちに何を伝えようとしているのですか?

int main(int argc, char** argv)

UPDATE:そして、前のコード行はこのint main(int argc, char* argv[])に似ていますか?もしそうなら、どのようにして_char** argv_は_char* argv[]_に似ていると言えますかarrayの観点からは似ていませんか?

引数のないint main()と比較してどうですか?

ありがとう。

11
Simplicity

argcパラメータは、実行可能ファイルが呼び出されたときに実行可能ファイル名を含む、指定されたコマンドラインオプションの数です。個々のコマンドラインオプションは、argv配列であるNULL配列にあります(実行可能ファイルの呼び出しに使用される名前とパスはargv[0])。

2つのバージョンの違いは、コマンドライン引数を解析するかどうかだけです。それらに興味がない場合は、2番目の形式を使用して無視できます。

12
trojanfoe

Wikipedia は良い説明を提供します。最初のパラメーターはコマンドライン引数の数を示し、2番目のパラメーターは実際の引数を示します。

4
Björn Pollex

これらはコマンドラインパラメータを表します。

argcは、実行可能ファイルの名前を含むコマンドラインパラメータの数です。 argvはnullで終了する文字列の配列で、argv[0]はコマンドラインパラメータであり、argv[i]はその後のi番目のパラメーター、argv[argc-1]は最後のものであり、argv[argc]は実際には明確に定義されており、NULLポインターです。

したがって:

foo bar baz

コマンドラインではargc = 3、argv[0] = "foo" argv[1] = "バー" argv[2] = "baz" argv[3] = NULL

「フラグ」引数には特別なアタッチメントはありません。

grep -i foo bar.cpp bar.h

4つの引数(argc = 5はgrep自体を含む)を持ち、-iはそのうちの1つです。これは、次のパラメーターがフラグに付加された「値」であった場合でも適用されます。

ワイルドカードを使用したかどうかに注意してください

grep -i foo *

少なくともUNIXでは、grepを呼び出す前に*が展開されるため、一致した各ファイルが引数になります。

ちなみに

char** argvおよびchar* argv[]

同じことをしてください。

また、標準ではこれらのシグネチャの1つを使用する必要があると記載されていますが(constsを追加することもできません)、これらの2つの変数名を使用する必要がある法律はありませんが、非常に一般的なため、慣習的です。 (つまり、必要に応じてargCountおよびargValuesを使用できます)。

4
CashCow

argcは引数の数を示し、argvはそれらの引数を示します。最初の1つは、プログラムの実行に使用される.exeへのパスです。次の1つは、コマンドラインで次のように指定された.exeの呼び出し元の引数です。

my.exe arg1 arg2

一方

int main() {}

引数を無視するだけです。

2
Bernd Elkemann

argvは、アプリケーションに渡されるコマンドラインパラメータを保持する配列です。 argcは、その配列に含まれる要素の数を示します。

2
Kai