我有一个用于创建新的函数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;
}
我这样使用它:
volatile GQueue * kbdQueue = newGQueue(10, 1);
但是,在这一行出现以下编译错误:
Error: initializer element not constant
为什么会出现这种情况? 10 和 1 显然是常数,不应该打扰malloc
等预c99
C code.
唯一的标志是-Wall
.
Thanks
您只能在声明时使用常量值初始化全局变量,这newGQueue
is not.
这是因为在程序开始执行之前必须初始化所有全局变量。编译器在声明时获取分配给全局变量的任何常量值,并在程序的数据段它被直接加载到内存中操作系统加载程序当程序运行时。
只需在声明时将 kbdQueue 初始化为 NULL 并将其初始化为 main 或其他启动函数中的值即可。
volatile GQueue * kbdQueue = NULL;
int main() {
kbdQueue = newGQueue(10,1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)