C++标准库 - std :: setenv vs setenv

mag*_*nus 11 c++ environment-variables c++11

我有一个简单的调用std::setenv,它在我的Linux发行版下工作正常gcc.但是,clang在我的Mac OS X上使用时,出现以下错误.

error: no member named 'setenv' in namespace 'std'; did you mean simply 'setenv'?
std::setenv(name.c_str(), value.c_str(), true);
Run Code Online (Sandbox Code Playgroud)

我敢肯定,我已经阅读了C++ 11 setenv中名称空间的一部分std,但现在我不确定.

问题:应该使用setenv还是std::setenv使用,为什么会这样?

Bau*_*gen 13

我不觉得像什么std::setenvCPPR,只有std::getenv其中的文档中引用了POSIX的功能setenv,当然这是没有namespace std.

因此,既然你没有调用C++标准函数,那么plain setenv应该是要走的路,因为这是定义函数的标准定义它的方式.请注意,std::setenv允许(但不是必需)工作.(另见hvd的评论.)

对于标准爱好者:setenv仅被提及为

getenv如果没有任何修改环境的话,对函数的调用不应引入数据竞争(17.6.5.9).[注意:调用POSIX函数setenvputenv修改环境. - 结束说明]

来自N3797 18.10.5.它确实不是C++标准函数,因此不一定是namespace std.