gpt4 book ai didi

c - 从 c 中的函数初始化静态常量变量

转载 作者:行者123 更新时间:2023-12-04 01:47:14 26 4
gpt4 key购买 nike

我最近在尝试执行以下逻辑时遇到了一些麻烦:

static const int size = getSize();

int getSize() {
return 50;
}

我收到的错误是 initialiser element is not constant
在线阅读我了解到这个问题是因为编译器评估了 static const在编译时表达,因此无法知道该值应该是什么。

我的问题是如何解决这个问题?

如果我有一个包含许多函数的库,但它们都需要这个逻辑,他们应该如何使用它而不必每次都计算它?

即使他们必须这样做,如果逻辑本身可以在整个运行时更改,但我只想要从函数中收到的第一个值,该怎么办?

也许我应该澄清一下 getSize 中的逻辑只是一个例子,它还可以包含从特定文件中检索文件大小的逻辑。

最佳答案

与 C++ 不同,您不能使用 C 中函数的结果初始化全局变量,而只能使用编译时已知的实常数。

你需要写:

static const int size = 50;

如果常量必须由函数计算,你可以这样做:

不申报 static const int size = ...不再,但写这个:
int getSize()
{
static int initialized;
static int size;

if (!initialized)
{
size = SomeComplexFunctionOfYours();
initialized = 1;
}

return size;
}

int main(void)
{
...
int somevar = getSize();
...

那样 SomeComplexFunctionOfYours()第一次调用 getSize() 时只会调用一次.需要付出一点代价:每次调用 getSize() ,需要进行测试。

或者你可以像这样显式地初始化它,然后 size不能是 const不再:
static int size;

void InitializeConstants()
{
size = SomeComplexFunctionOfYours();
}

int main(void)
{
InitializeConstants();
...
int somevar = size;
...

关于c - 从 c 中的函数初始化静态常量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54831046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com