getenv_s 不是 cstdlib 的一部分吗?

问题描述 投票:0回答:1

C11 在标准库中添加了新的边界检查函数,例如 getenv_s。 但是,当我包含

<cstdlib>
时,我没有
std::getenv_s
,只有
getenv_s
(全局命名空间)。

cppreference 有以下注释:

与所有边界检查函数一样,getenv_s 只能保证 如果

__STDC_LIB_EXT1__
是可用的,则由实现定义并且 如果用户将
__STDC_WANT_LIB_EXT1__
定义为整数常量 1 在包括 .

之前

即使我将

__STDC_WANT_LIB_EXT1__
定义为
1
,我的编译器 (MSVC C++23) 也找不到函数 std::getenv_s。

enter image description here

cstdlib
不是应该将
stdlib.h
的每个符号带入
std::
命名空间吗?

c++ visual-c++ std
1个回答
0
投票

这些函数是 C 的一部分,但不是 C++ 的一部分,因此它们不出现在

std
命名空间中是有道理的(无论您如何包含它们)。从技术上讲,甚至全局
getenv_s
名称也不是 C++ 的一部分。

此外,它们在 C 中只是可选的,并非所有实现都支持它们。

© www.soinside.com 2019 - 2024. All rights reserved.