【问题标题】:Initializer element is not a constant初始值设定项元素不是常数
【发布时间】:2023-04-11 03:01:01
【问题描述】:

我必须为一个静态变量分配一个我从函数中获取的值。 我尝试执行以下操作,但我得到初始化元素不是恒定的。

int countValue()
{
return 5;
}

void MatrixZero()
{

 static int count=countValue();
 count++;
 printf("count value %d \n",count);

}


int main()
{
    MatrixZero();
    return 0;   

}

【问题讨论】:

  • 尝试使用 C++ 编译器。确保添加“#include ”。 C 不允许使用非常量初始化静态变量。
  • @RichardPennington 这是 C 和 C++ 是不同的语言。我不认为用 C++ 编译器编译 C 程序是一个好建议。
  • @ouah 首次发布时并未标记为 C。我只是指出 C 和 C++ 处理静态初始化程序的方式不同。

标签: c


【解决方案1】:

因为...好吧...静态变量的初始化器不是常量。它必须是一个常量表达式。试试这个:

static int count = SOME_VALUE_OUT_OF_RANGE;
if (count == SOME_VALUE_OUT_OF_RANGE) {
    count = countValue();
}

检查它是否已经初始化。

【讨论】:

    【解决方案2】:

    使用static 存储说明符声明的变量必须使用常量表达式进行初始化。

    static int count=countValue();
    

    函数调用不是常量表达式。

    【讨论】:

      【解决方案3】:
      // wenn countValue ein Objekt zurückgibt
      
      static int* count=0;  if(count==0)count=countValue();
      

      【讨论】:

      • 请详细说明这段代码是如何回答这个问题的。
      • 他从@thatwiseguy 单行编写了相同的代码
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多