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

标签 c struct linked-list visual-studio-2015 stack

我正在尝试创建一个结构对象(堆栈),它包括:

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

typedef struct {
    node_t * top;
    int max_size;
    int used_size;
} Stack;

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

 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

我收到上面提到的错误 -

function call is not allowed in constant expression

我以前从未遇到过这种类型的错误,我不知道如何解决。感谢您的帮助。

最佳答案

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

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

如果你想要一个全局变量S,那么用newStack(256)“初始化”它的唯一方法是在程序的某个函数中进行启动。例如

Stack * S;

int main()
{ 
  S = newStack(256);
  ...
}

关于C struct object Stack - 常量表达式中不允许函数调用(错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186290/

相关文章:

c - 16 岁代码中的 "error: initializer element is not constant"

c - 取消引用指向不完整类型的指针 ‘struct'

java - 如何更快地检查多个包含操作?

c# - 将 C 语言的 CRC16 代码移植到 C# .NET

C - 创建具有与输入相关的数组数量的结构

c - 有效地选择一个与列表的所有元素不同的整数

c++ - 指向结构 C++ 中的 vector 的指针

C pthread 和 struct 问题

c - 如何初始化结构值并正确输出结构

c++ - 字母排序是向后使用 string.compare()