我有一个简单的std::setenv
调用,它在gcc
下的Linux发行版上运行正常。但是,在我的Mac OS X上使用clang
时,我收到以下错误。
error: no member named 'setenv' in namespace 'std'; did you mean simply 'setenv'?
std::setenv(name.c_str(), value.c_str(), true);
我确定,我已经在某个地方读到setenv
是C ++ 11中命名空间std
的一部分,但现在我不确定。
问题:应该使用setenv
还是std::setenv
,为什么会出现这种情况?
答案 0 :(得分:12)
我find std::setenv
上没有cppr,std::getenv
只有setenv
,其文档中引用了POSIX函数hvd's comment,当然这是< namespace std
中的em> not 。
因为你没有调用C ++标准函数,所以普通setenv
应该是要走的路,因为这是定义函数的标准定义它的方式。请注意,std::setenv
允许(但不是必需)工作。 (另见Getting the user id from logged in user in FOSUserBundle。)
对于标准爱好者:setenv
仅作为
对函数
getenv
的调用不应引入数据竞争(17.6.5.9),前提是没有任何修改 环境。 [注意:调用POSIX函数setenv
和putenv
会修改环境。 - 结束 注意]
来自N3797 18.10.5。它确实不是C ++标准函数,因此不一定在namespace std
中。