【问题标题】:error: variable-sized object may not be initialized|错误:可变大小的对象可能未初始化|
【发布时间】:2014-07-05 05:01:22
【问题描述】:

我的代码如下:

const size_t NUM_P = 100;
int main (viod)
{
   char *pS[NUM_P] = { NULL};            /* Array of string pointer */
   /* Other code */
}

我的编译器是CODEBLOCK,将NUM_P改成数字后错误就会清除,比如“12,or 35 ..”,我不知道错误的根本原因,还是我的编译器问题。

【问题讨论】:

    标签: c


    【解决方案1】:

    你的问题的根源是NUM_P是一个变量,即使它是一个const

    将其声明替换为#define NUM_P 100,您的代码将再次编译。

    【讨论】:

      【解决方案2】:

      在 C 中,您不能为 VLA 提供初始化程序。

      我建议对数组维度使用编译时常量;那么它就不是 VLA:

      #define NUM_P 100
      
      int main(void)
      {  
          char *pS[NUM_P] = { 0 };
      }
      

      由于历史原因,const 变量在 C 中不被视为常量表达式。

      【讨论】:

      • OK,也就是说const变量还是变量,但是我们需要一个常量吗?
      【解决方案3】:

      这在 C++ 中有效,但在 C 中无效。您可以在 C 中使用预处理器符号来执行此操作。

      #define NUM_P 100
      int main (viod)
      {
         char *pS[NUM_P] = { NULL};
      }
      

      【讨论】:

        猜你喜欢
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 2012-12-20
        • 2021-03-02
        相关资源
        最近更新 更多