【问题标题】:Initializer element code error初始化器元素代码错误
【发布时间】:2011-03-28 10:25:25
【问题描述】:

当我运行这段代码时:

void main(){
   int a = 5;
   static int i = a+5;
   printf("%d", i);
}

我收到错误:初始化元素不是常量

这是什么意思?

【问题讨论】:

  • 注意:void main 让耶稣宝宝哭泣。
  • @cHao void main 与此问题无关...
  • @AMIT:这就是为什么我没有将其发布为答案。只是说。

标签: c


【解决方案1】:

函数范围内的静态变量进入数据段。数据段在编译时初始化。这意味着必须在编译时知道初始值。在您的情况下,初始值(a 的值)来自堆栈上的一个变量,该变量仅在运行时可用。

【讨论】:

    【解决方案2】:

    在 C Initializer 中应该是一些常数。但是你可以做这样的事情......

    int a = 5;
    static int i;
    i = a + 5;
    printf("%d", i);
    

    这不会产生任何错误...

    【讨论】:

    • 您所说的是初始化程序应该是恒定的,但是这段代码 void main() { int a=5;诠释 i=a+5; printf("%d",i); }
    • 静态变量应该用常量初始化,而不是用包含变量的表达式。如果我错了,请纠正我...
    【解决方案3】:

    您不能将变量分配给静态变量。

    【讨论】:

      【解决方案4】:

      因为您不是使用常量(如int a = 5;)初始化变量i,而是使用非法的表达式(a+5)。

      【讨论】:

        【解决方案5】:

        关键字static 意味着只有一个变量i 的实例,并且该实例将贯穿程序的整个生命周期。这很有用,例如,如果您想在函数调用之间存储值。

        由于变量是在应用程序启动时初始化的,所以值必须是常量。

        在您的情况下,无需声明“静态”,因为每次调用函数时它都会获得一个新值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 1970-01-01
          • 1970-01-01
          • 2012-04-10
          • 2020-05-30
          • 2020-06-13
          相关资源
          最近更新 更多