繁体   English   中英

从c中的函数初始化一个静态const变量

[英]Initialising a static const variable from a function in c

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

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;
  ...

编译器需要在编译时知道常量变量的值,因为它是常量。

您也无法使用函数初始化变量。

你应该做这样的事情:

#define SIZE 50

static const int size = SIZE;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM