我对std::setenv有一个简单的调用,它在gcc下的Linux发行版上运行良好。但是,在我的Mac上使用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 ,为什么会出现这种情况?
发布于 2015-05-17 22:09:36
我不发现类似std::setenv on cppr的任何东西,只有在其文档中引用POSIX函数setenv (当然不是namespace std中的)的std::getenv。
因此,由于您没有调用C++标准函数,所以普通的setenv应该是正确的方法,因为定义该函数的标准就是这样定义它的。注意,std::setenv是允许(但不是必需的)工作的。(另见hvd的评论。)
对于标准爱好者:setenv只被提到为
对函数
getenv的调用不应引入数据竞赛(17.6.5.9),前提是不对环境进行任何修改。注意:对POSIX函数的调用setenv和putenv修改环境。-尾注
从N3797 18.10.5。它确实不是C++标准函数,因此在namespace std中也不一定。
https://stackoverflow.com/questions/30292642
复制相似问题