尝试使用const初始化变量时出现错误“初始化元素不是常量”

断层逻辑

我在以下程序的第6行(将my_foo初始化为foo_init)收到错误,我不确定我理解为什么。

typedef struct foo_t {
    int a, b, c;
} foo_t;

const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;

int main()
{
    return 0;
}

请记住,这是我正在处理的较大的多文件项目的简化版本。目标是在目标文件中具有一个常数,多个文件可用于初始化状态结构。由于它是资源有限的嵌入式目标,并且结构不是那么小,因此我不需要源的多个副本。我不想使用:

#define foo_init { 1, 2, 3 }

我也在尝试编写可移植的代码,因此我需要一个有效的C89或C99解决方案。

这与目标文件中的ORG有关吗?那些初始化变量进入一个ORG,并通过复制第二个ORG的内容进行初始化?

也许我只需要改变自己的策略,并具有初始化功能即可在启动时完成所有副本。除非那里有其他想法?

蚂蚁

在C语言中,必须使用常量表达式或包含常量表达式的聚合初始化程序来初始化具有静态存储持续时间的对象

即使将“大”对象声明为,它也绝不是C中的常量表达式const

另外,在C语言中,术语“恒定”是指文字常数(如1'a'0xFF等等),枚举成员,并且这样的运营商的结果sizeofconst限定的对象(任何类型)在C语言术语不是常量无论它们的类型如何,都不能在具有静态存储持续时间的对象的初始化程序中使用它们。

例如,这不是常数

const int N = 5; /* `N` is not a constant in C */

上面的内容N在C ++中是一个常量,但在C中不是常量。因此,如果尝试

static int j = N; /* ERROR */

您将得到相同的错误:尝试使用非常量初始化静态对象。

这就是为什么在C语言中,我们主要使用#define来声明命名常量,并且还求助于#define创建命名聚合初始化器的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化元素不是常量?

不使用字符串时,初始化元素不是常量错误

初始化元素不是 malloc 的编译时常量

Libcurl问题-“初始化元素不是常量”

错误:初始化元素不是C语言中的编译时常量

C-const问题-错误:初始化元素不是恒定的

尝试实例化新类时出现未初始化的常量错误

初始化程序中出现错误“在初始化之前使用常量'self.apiKey'”

尝试创建客户端时出现“未初始化的常量”错误

尝试包含类/对象关联时出现未初始化的常量错误

尝试使i = i * i时,为什么出现错误“使用未初始化的内存'i'”和“使用了未初始化的局部变量'i'”的错误

C初始化程序元素不是常量[数组和变量之间有什么区别]

尝试初始化结构数组时出现段错误

为什么 Clang 抱怨本地复合文字的“初始化元素不是编译时常量”?

初始化元素不是用于全局声明时间函数的常量

为什么“初始化器元素不是常量”无法正常工作?

初始化kubernetes时出现环境变量错误

在lib文件夹中使用Ruby Object时出现未初始化的常量错误

初始化const变量

Tensorflow错误:FailedPeconditionError:尝试使用未初始化的变量

C中的全局变量链表队列?(初始化元素不是常数)

为什么未初始化的constexpr变量不是常量?

将对象定义为函数的静态成员时,“初始化元素不是恒定的”

当我尝试在属性初始化中使用 nameof 时出现错误 cs0120

变量初始化错误

修补Redmine时出现未初始化的常量

右键单击某个元素时,出现“未初始化的常量 Selenium::WebDriver::DriverExtensions::HasInputDevices (NameError)”错误

Python使用初始化文件和默认常量文件中的变量初始化类

为什么在Swift中初始化变量的行上出现“初始化前使用变量”错误?