2014-07-05 101 views
0

我的代码波纹管:错误:可变大小的对象可能未初始化|

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

我的编译器代码块,误差就会清楚何时NUM_P更改为数字,如“12或35 ..”,我不知道是根本原因的错误,或者这是我的编译器问题。

回答

2

你的问题的根源在于NUM_P是可变的,哪怕是一个const一个。

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

1

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

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

#define NUM_P 100 

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

由于历史的原因,const变量不被认为是C.

+0

好吧,这意味着一个const变量仍然是可变的,但我们需要一个常量? – SevenCode

0

的常量表达式在C有效++而不是C.你可以使用一个预处理器符号做,在C.

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