3

我々は持っています

int main(int argc, char** argv, char** envc)

普通のために。しかし、これらの代わりに main が持つことができる他の引数があるかどうか知りたいです。また、存在する場合、それは何を指していますか?

4

5 に答える 5

6

さて、内訳は次のとおりです。

  • argc-- C 標準
  • argv-- C 標準
  • env-- ほとんどの UNIX および MS Win で動作しますが、標準では動作しません
  • apple-- Mac OSX と Darwin によって 4 番目の引数として渡されるその他の情報
于 2012-08-18T17:20:11.050 に答える
4

答えは C と C++ で異なります。

  • C++ では、main常に を返す必要がありますint。すべての実装は()(int, char**)署名を受け入れる必要があります。実装、他の署名を受け入れることができます。受け入れられた署名が で始まる場合int, char**, ...、それらは通常の意味を持つはずです。(また、mainC リンケージを取得し、オーバーロードしてはならず、テンプレートであってはならず、呼び出してはなりません。)

  • C では、main任意の形式を取ることができます。ただし、すべての実装は型を受け入れる必要がint(void)ありint(int, char**)ます。

お気付きのように、特定の環境でサポートされ、これらのガイドラインに準拠している一般的な署名の 1 つはint main(int argc, char * argv[], char * env[])、3 番目の引数に環境へのポインターが含まれている です。他の拡張も考えられます。プラットフォームのドキュメントを確認してください。

于 2012-08-18T17:30:45.443 に答える
3

argc と argv のみが標準の引数です。それ以降は、システムとコンパイラによって異なります。

于 2012-08-18T17:20:02.917 に答える
2

私はこれがあなたの質問に答えると思います:

http://en.wikipedia.org/wiki/Main_function#C_and_C.2B.2B

于 2012-08-18T17:23:24.260 に答える
1

これは標準の拡張です
が、環境へのアクセスを提供することになっています。

int main(int argc, char** argv, char** envc)
{
    // It is an array of pointers to C-String
    // The array is terminated with a NULL pointer.
    // So you can loop over with it like this.
    for(int loop = 0;envc[loop] != NULL; ++loop)
    {
        fprintf(stdout, "%s\n", envc[loop]);
    }
}
  • argc: argv の有効な要素の数
  • argv: コマンド ライン引数の C 文字列の配列。
  • envc: 環境の C 文字列の配列 (NULL ポインターで終了)。

おそらく使用する方が良いでしょうgetenv

char * getenv ( const char * name );

http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/

于 2012-08-18T18:00:33.043 に答える