gpt4 book ai didi

C 编译器错误 - 初始值设定项不是常量

转载 作者:太空狗 更新时间:2023-10-29 15:18:37 26 4
gpt4 key购买 nike

我有一个函数用来创建一个新的 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);

但是,在这一行出现如下编译错误:

错误:初始化元素不是常量

为什么会这样? 10 和 1 显然是常量,不应该影响 c99 之前的 C 代码中的 malloc 等。

唯一的标志是-Wall

谢谢

最佳答案

您只能在声明时使用常量值初始化全局变量,newGQueue 不是。

这是因为在程序开始执行之前必须初始化所有全局变量。编译器在声明时获取分配给全局变量的任何常量值,并在程序的 data segment 中使用该值OS loader 直接加载到内存中程序运行时。

只需在声明时将您的 kbdQueue 初始化为 NULL,并在 main 或其他启动函数中将其初始化为一个值。

volatile GQueue * kbdQueue = NULL;

int main() {
kbdQueue = newGQueue(10,1);
}

关于C 编译器错误 - 初始值设定项不是常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com