我有一個簡單的電話std::setenv
,這在我的Linux發行版中工作正常,在gcc
下。但是,在我的Mac OS X上使用clang
時,出現以下錯誤。C++標準庫 - std :: setenv vs setenv
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
,爲什麼會出現這種情況?
C++標準沒有定義'setenv',所以如果實現將它定義爲擴展,它們可以使用全局命名空間,'std'命名空間或任何其他命名空間,但是它們看起來合適。在'std'命名空間中聲明它的OP的實現與OP的其他實現不一樣有效。 (爲了澄清:我確實同意簡單的'setenv'是OP應該使用的東西,但是你的回答就好像「std :: setenv」工作的事實是一個錯誤。) – hvd
@hvd但是缺少進一步的文檔除了POSIX之外,我不知道也沒有找到任何'setenv'),我假設他在談論POSIX,並且想知道它是否也是標準的C++函數。由於POSIX函數不在'namespace std'中,全局調用將是訪問它的一般方法。雖然一些像linux上的gcc這樣的平臺將它添加到'namespace std'中,但定義它的標準卻沒有。我錯了嗎? –
@hvd還要注意,我從來沒有說過'std :: setenv'不允許工作,只是不能保證。 –