啊啊
list* FunctionNamesCreate();
list* const FunctionNames = FunctionNamesCreate();
交流
list* FunctionCreate() {
list* FunctionNames = listCreate(sizeof(char*));
listPushHead(FunctionNames,"s");
return FunctionNames;
}
list
很简单void*
链表结构
当我想创建FunctionNames
时全局变量代码编辑器给我以下错误:a.h:8:29: error: initializer element is not a compile-time constant
。如果我不使用const
前
FunctionNames
代码编辑器给了我同样的错误。
最佳答案
本声明
list* const FunctionNames = FunctionNamesCreate();
是具有静态存储持续时间的文件范围声明,可以通过常量编译时表达式进行初始化。
来自 C 标准(6.7.9 初始化)
4 All the expressions in an initializer for an object that has static or thread storage duration shall be constant expressions or string literals.
这个表达式
FunctionNamesCreate()
不是编译时常量表达式。函数调用在运行时计算。
来自 C 标准(6.6 常量表达式)
3 Constant expressions shall not contain assignment, increment, decrement, function-call, or comma operators, except when they are contained within a subexpression that is not evaluated.
无需在文件范围内声明指针。此外,当您在 header 中放置具有外部链接的指针定义时,这是一种不好的方法。例如在 main 中声明指针。
关于c - 初始化元素不是使用 C 的编译时常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65774807/