1. ホーム
  2. c

[解決済み] main(int argc, char *argv[])' [重複]について

2023-01-01 02:58:25

質問

重複の可能性があります。

main()の引数は何のためですか?

int argc, char *argv[] は何を意味するのですか?

どのプログラムも最初は main(int argc, char *argv[]) の定義に従います。

意味がよくわかりません。私は誰かが私たちがプログラムでそれらを使用しない場合は、これらの引数を使用する理由を説明することができれば非常にうれしいです?なぜ、ただではありません。 int main() ?

の要素の一つですか? *argv[]argc の引数の個数です。 *argv[] ? に送られる他の引数は何ですか? *argv[] ? どのように送信するのですか?

どのように解決するのですか?

引数 argcargvmain はプログラムに引数を送る方法として使用されます。 cat file . ここでは、単語 cat は、ファイルを取り込んで標準出力に出力するプログラム ( stdout ).

プログラムは、引数の個数を argc の引数のベクトルと argv で、上記では arg c は2つ(プログラム名は第1引数にカウントされます)、そして arg ウメント v ector は [ ] を含む。 cat , file , ヌル ]. 最後の要素がヌルポインターである間。

一般的には、このように書きます。

int  // Specifies that type of variable the function returns.
     // main() must return an integer
main ( int argc, char **argv ) {
     // code
     return 0; // Indicates that everything went well.
}

引数を必要としないプログラムであれば、同じように main -関数を次のように書くことも同様に有効です。

int main() {
  // code
  return 0; // Zero indicates success, while any 
  // Non-Zero value indicates a failure/error
}

C言語の初期のバージョンでは、C言語には int の前に main というように、暗黙の了解があった。今日では、これはエラーと見なされています。

について POSIX -に準拠したシステム (および Windows) では、3 番目のパラメータである char **envp これはプログラムのベクトルを含む エンベロープ アイロメント変数 . の引数リストのさらなるバリエーションは main 関数の引数リストは他にもありますが、非標準的なものなのでここでは詳しく説明しません。

また、変数の命名が 規約 であり、実際の意味はありません。他の人を混乱させないためにこれを守るのは常に良いことですが、同様に有効なのは、定義された main として定義することも同様に有効です。

int main(int c, char **v, char **e) {
   // code
   return 0;
}

また、2つ目の質問ですが、プログラムに引数を送る方法はいくつかあります。私がお勧めするのは exec*() 関数のファミリー というのは POSIX より簡単 を使う方が簡単でしょう。 system ("command arg1 arg2") を使用していますが system() の使用は、すべてのシステムで動作することが保証されているわけではないので、通常は嫌われます。私は自分でテストしたことはありませんが、もし bash , zsh または *NIX-system にインストールされている他のシェル。 system() は失敗します。