我正在尝试创建一个结构对象(堆栈),它包括:
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/