3

getenv() には、ヘッダー ファイルに含めることができる C++ 実装があります。したがって、名前空間 std のメンバーです。ただし、getenv() 関数は、std::getenv() がなくてもコード内で正しく解決できます。つまり、フォロー プログラムをエラーや警告なしでコンパイルして実行できます。では、名前空間 std の名前メンバーとしての getenv() が std:: なしで解決できるのはなぜですか? 私の OS とコンパイラは、それぞれ Ubuntu 12.04 i386 と g++ 4.8.1 です。

#include <cstdlib>
#include <iostream>

int main()
{
    char * path_env;

    path_env = getenv("PATH"); //without a name resolve operation std::getenv()

    std::cout << path_env << std::endl;

    return 0;
}
4

3 に答える 3

0

あなたのコードはおそらく移植性がありません。ところで、含めなくてもうまくいくよう<cstdlib>です。宣言を注意深く見ると、次のようになります。

http://en.cppreference.com/w/cpp/utility/program/getenv

実際に に属していることがわかります。通常の規則では、 + 以前の C ライクなヘッダーcstdlibで始まるすべてのヘッダーがにあるため、 を使用する必要があります。cnamespace std;std::

についても同じことが起こり、std::string多くの標準ライブラリ ヘッダーに含まれているようですが、標準を見れば、これに依存するべきではありません。

于 2015-04-10T01:20:58.820 に答える