繁体   English   中英

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

[英]C struct object Stack - function call is not allowed in constant expression (error)

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

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

我收到上面提到的错误 -

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

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

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

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

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

Stack * S;

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

在 C 中,请确保对函数的调用是在函数内部完成的。 例如:-

#include <stdlib.h>
int return_something()
{
   return 100;
}

int something = return_something();

这显然会通过一个错误来解决这个问题,从其他一些函数框架中调用 int_something()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM