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

Jet*_*max 3 c struct global compile-time

我对 C 很陌生,我有一些问题。

我有以下结构定义:

struct env {
  struct env *next;
  char varName[8];
  int n;
};
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

我想全局创建一个这样的结构,它是具有一些常量值的常量,并且最初具有指向下一个结构 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
    }
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

evalexp.c:116:20: 错误:初始化元素不是编译时常量 struct env *list = mkEnv("p" , 0 , NULL);

在谷歌搜索错误消息后,我明白这个错误意味着什么,但是有没有办法在函数之外的某个地方创建一个结构而不会出现这个编译错误?

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

提前致谢!

250*_*501 5

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

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

struct env lists = { NULL , "pot" , 0 };
struct env *list = &lists;
Run Code Online (Sandbox Code Playgroud)

现在指针list已初始化并可使用,但要注意它不是用 malloc 创建的,因此它不能被释放或重新分配