gpt4 book ai didi

c - c中的全局结构(初始化元素不是编译时常量)

转载 作者:行者123 更新时间:2023-12-02 06:31:18 26 4
gpt4 key购买 nike

我对 C 很陌生,但遇到了一些问题。

我有以下结构定义:

struct env {
struct env *next;
char varName[8];
int n;
};

我想最终在我的一些函数中创建多个这些结构,所以我创建了一个函数来做到这一点:

struct env *mkEnv(char c[8] , int value , struct env *toadd){
struct env *enviroment = malloc(sizeof(struct env));
enviroment->n = value;
enviroment->next = toadd;
strcpy(enviroment->varName , c);
return enviroment;
}

我想在全局范围内创建一个这样的结构,它具有一些常量值,并且最初具有指向下一个结构 NULL 的指针。

所以我做了这样的事情:

    //not in a function
struct env *list = mkEnv("pot" , 0 , NULL);

//Beginning of a function
int eval(struct expression *exp){
... // code here that might add a new structure to the pointer of list
}

我收到以下错误:

evalexp.c:116:20: error: initializer element is not a compile-time constant struct env *list = mkEnv("p" , 0 , NULL);

我在谷歌上搜索错误消息后了解此错误的含义,但是有没有办法在函数之外的某处创建结构而不会出现此编译错误?

为了更清楚:我想创建一个如上所述的结构(好像它是列表的头部)。这样我的所有功能都可以访问并向其中添加内容。也就是将其解析为列表和/或在该列表中添加新元素。

提前致谢!

最佳答案

不能在文件范围内调用函数。

您必须使用常量值并定义一个实际的结构变量:

struct env lists = { NULL , "pot" , 0 };
struct env *list = &lists;

现在指针list已经初始化,可以使用了,但是要注意不是用malloc创建的,所以不能freed或者realloc 吃过。

关于c - c中的全局结构(初始化元素不是编译时常量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538925/

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