将constexpr与getEnv(或替代性)一起使用

Using constexpr together with getenv (or alternative)

本文关键字:一起 替代性 constexpr getEnv      更新时间:2023-10-16

我正在尝试从构建服务器捕获环境变量,作为可以在构建库中使用的编译时间常数。我有一个静态类,可以对这些常数查询,并且想与std::getenv一起使用constexpr,但是由于getenv返回到期,我会从恒定表达式中开始constexpr变量的错误,因此必须从常数表达式初始化。事实上它在牙齿上有点长。

如果可能的话,我想避免通过将所有env var作为-DMY_ENV_VAR注入build脚本。如果答案简单地"否,您必须将每个添加为这样的定义",并且没有getenv的现代替代方案或我可以使用的技巧,那么就可以维护2个斑点,这不是理想的。

getenv与CC_7进行交互的C 程序的运行时环境从根本上不是编译时间常数。

您指出的char* vs const char*问题与此问题无关。

编译时间常数是在编译时固定的。您的运行时环境未在编译时固定。因此getenv的返回值不能constexpr

您可以创建脚本,该脚本编写包含要存储在constexpr存储中的构建时间环境变量的标题,而不是一堆-D命令。

我不认为std :: getEnv可以用作constexpr,因为它是一个运行时系统调用。您的意思是"将要维护2个斑点"?您的静态类只会使用传递到构建的定义,即

class CBuildConsts
{
    public:
    static const std::string Thing;
}

,然后在.cpp文件中

const std::string CBuildConsts::Thing = std::string("MY_ENV_VAR");