我的代码波纹管:错误:可变大小的对象可能未初始化|
const size_t NUM_P = 100;
int main (viod)
{
char *pS[NUM_P] = { NULL}; /* Array of string pointer */
/* Other code */
}
我的编译器代码块,误差就会清楚何时NUM_P更改为数字,如“12或35 ..”,我不知道是根本原因的错误,或者这是我的编译器问题。
我的代码波纹管:错误:可变大小的对象可能未初始化|
const size_t NUM_P = 100;
int main (viod)
{
char *pS[NUM_P] = { NULL}; /* Array of string pointer */
/* Other code */
}
我的编译器代码块,误差就会清楚何时NUM_P更改为数字,如“12或35 ..”,我不知道是根本原因的错误,或者这是我的编译器问题。
你的问题的根源在于NUM_P
是可变的,哪怕是一个const
一个。
将其声明替换为#define NUM_P 100
,您的代码将再次编译。
在C中,您不允许为VLA提供初始化程序。
我建议使用编译时常量的数组维度;那么它是不是一个VLA:
#define NUM_P 100
int main(void)
{
char *pS[NUM_P] = { 0 };
}
由于历史的原因,const
变量不被认为是C.
的常量表达式在C有效++而不是C.你可以使用一个预处理器符号做,在C.
#define NUM_P 100
int main (viod)
{
char *pS[NUM_P] = { NULL};
}
好吧,这意味着一个const变量仍然是可变的,但我们需要一个常量? – SevenCode