我有一个用于创建新功能的功能 GQueue
GQueue* newGQueue(int n_ele, int ele_size)
{
GQueue* q = (GQueue*) malloc(sizeof(GQueue));
if(!q) return NULL;
q->ptr = malloc(n_ele * ele_size);
if(!(q->ptr))
{
free(q);
return NULL;
}
q->in = q->out = q->count = 0;
q->size = n_ele; q->ele_size = ele_size;
return q;
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
volatile GQueue * kbdQueue = newGQueue(10, 1);
但是,此行发生以下编译错误:
Error: initializer element not constant
为什么会这样?10和1显然是常规C代码中不应该打扰的常量malloc等c99.
只有旗帜-Wall.
谢谢
您只能使用常量值在其声明中初始化全局变量,而newGQueue不是.
这是因为在程序开始执行之前必须初始化所有全局变量.编译器在其声明中获取分配给全局变量的任何常量值,并在程序的数据段中使用该值,该数据段在程序运行时由OS加载程序直接加载到内存中.
只需在声明时将kbdQueue初始化为NULL,并将其初始化为main或其他启动函数中的值.
volatile GQueue * kbdQueue = NULL;
int main() {
kbdQueue = newGQueue(10,1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3431 次 |
| 最近记录: |