C struct object Stack - 在常量表达式中不允许函数调用(错误)

Log*_*gan 7 c stack struct linked-list visual-studio-2015

我正在尝试创建一个struct对象(堆栈),它包含:

typedef struct node {
    int val;
    struct node * next;
}node_t;

typedef struct {
    node_t * top;
    int max_size;
    int used_size;
} Stack;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试初始化对象并使用以下函数为其分配一些内存空间时:

 Stack * newStack(int max_size) {
    Stack * S = malloc(sizeof(Stack));
    S->top = NULL;
    S->max_size = max_size;
    S->used_size = 0;
    return S;
}

Stack * S = newStack(256); //error here
Run Code Online (Sandbox Code Playgroud)

我得到上面提到的错误 -

常量表达式中不允许函数调用

我以前从未遇到过这种类型的错误,我不知道如何处理它.任何帮助表示赞赏.

AnT*_*AnT 7

在C语言中,具有静态存储持续时间的对象只能使用常量表达式进行初始化.

您正在初始化全局变量 S,该变量是具有静态存储持续时间的对象.你的表情newStack(256)不是一个常量表达式.正如编译器已经告诉你的那样,不允许在常量表达式中调用函数.因此错误.这里的所有都是它的.

如果你想拥有一个全局变量S,那么"初始化"它的唯一方法newStack(256)就是在程序启动时在某个函数中执行它.例如

Stack * S;

int main()
{ 
  S = newStack(256);
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • @pm100:是的,C++ 允许这样做,但问题是关于 C 的。 (2认同)
  • 我告诉OP,如果他改用c++,他就可以做他想做的事(如果这是一个选择) (2认同)