1. ホーム
  2. c

main()の第3引数にchar *envp[]を指定するのはポータブルか?

2023-10-18 07:48:44

質問

で環境変数を取得するために C プログラムでは、次のように使うことができます。

  • getenv()
  • extern char **environ;

しかし、上記以外で char *envp[] を第三引数として main() として、標準の一部とみなされる環境変数を取得することができますか?

#include <stdio.h>

int main(int argc, char *argv[], char *envp[])
{
    while(*envp)
        printf("%s\n",*envp++);
}

char *envp[] はポータブルか?

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

関数 getenv はC標準によって指定された唯一のものです。関数 putenv と、外部からの environ は POSIX 固有のものです。

EDIT

この main パラメータ envp はPOSIXでは規定されていませんが、広くサポートされています。

<ブロッククオート

環境リストにアクセスする別の方法は、main()関数に を第3引数として宣言することです。

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

この引数はenvironと同じように扱うことができます。 この引数のスコープはmain()のローカルなものであるという違いがあります。この機能はUNIXシステムで広く実装されていますが この機能はUNIXシステムで広く実装されていますが、その使用は避けるべきでしょう。 スコープの制限に加え SUSv3 では規定されていない .