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

标签 c struct global compile-time

我对 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/

相关文章:

c - 我需要做什么才能使 bubbleSort() 全局修改数组值?

java - 重定向Android中C程序的STDIN和STDOUT

c - fgetc while 循环内的段错误

c - C 中的奇数错误;期待某事

c - memcpy/使用指针的链表的子列表

c# - 隐式转换 必须显式使用

c++ - 访问模板类结构类型成员

C99 指向结构的指针,该结构包含指向结构的指针

c++ - 全局数组在正常声明但不作为指针时导致段错误

php - 将变量从一个 php 包含文件传递到另一个 : global vs. 不