C标准库 – std :: setenv vs setenv

我有一个简单的调用std :: setenv,它工作在我的 Linux发行版gcc下找到.但是,在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是C11中命名空间std的一部分,但现在我不确定.

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

解决方法

我在 cppr上没有任何类似std :: setenv的任何东西,只有 std::getenv在其文档中引用了POSIX功能 setenv,这当然不在命名空间std中.

所以既然你没有调用C标准函数,那么普通的setenv应该是这样的,因为定义函数定义它的标准是什么.请注意,std :: setenv是允许的(但不是必需的)工作. (另见hvd’s comment.)

对于标准爱好者:setenv只提及

Calls to the function getenv shall not introduce a data race (17.6.5.9) provided that nothing modifies the
environment. [ Note: Calls to the POSIX functions setenv and putenv modify the environment. — end
note ]

来自N3797 18.10.5.它确实不是C标准函数,因此不一定在命名空间std中.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...