在移植代码时出现了 “variably modfied 'g_mem_array' at file scope”的错误,
在网上找的都是如下:
const int bufsize=100;
char buf[bufsize];
定义的时候使用
const int bufsize=100; 在C语言中,const不是一个真真正正的常量,其代表的含义仅仅是只读。使用const声明的对象是一个运行时对象,无法使用其作为某个量的初值、数组的长度、case的值或在类型的情形中使用
所以修改为:
#define BUFSIZE 100
char buf[BUFSIZE];
就可以了。
但是对我的这个问题,g_mem_array是定义成一个宏的:
#define MEM_CNT 800
#define MEM_BIT 8
#define MEM_SIZE ((184+(1<<MEM_CNT)))
unsigned int g_mem_array[MEM_SIZE];
后来仔细看了下编译的log:
#define MEM_SIZE ((184+(1<<MEM_CNT))) warning:left shift count >= width of type
因为MEM_CNT 是800,所以(1<<MEM_CNT)是一个巨大的数,所以 定义的这个数组g_mem_array就是一个巨大的数组,
显然没有能支持这个大小的系统。
后和相关同事确认之后,修改MEM_SIZE:
#define MEM_SIZE ((184+(1<<MEM_BIT)))
就编译过了。