初始化类型def结构的类型def字段

时间:2018-04-09 01:34:53

标签: c field typedef

MachineState machine;
ControlSignals theControls = machine.control_signals; //Why is this giving an error?

Error: traceTemp.c:4:38: error: initializer element is not a compile-time constant. ControlSignals theControls = machine.control_signals;

为什么会出错?你如何访问类型def的字段,它也是一个typedef?下面是我如何定义两个typedef。请让我知道如何解决它。谢谢!

typedef struct {
.
.
.
} ControlSignals;


typedef struct {
ControlSignals control_signals;
.
.
} MachineState;

2 个答案:

答案 0 :(得分:0)

在文件范围(即函数外部)初始化变量时,初始化程序必须是编译时常量,因为错误消息指出。编译时常量意味着(松散地说)数字常量,字符串常量或它们的分组。而是将其设置为另一个变量的值。

您需要使用常量值来初始化变量,或者稍后在程序中通过赋值来设置它。

答案 1 :(得分:0)

除非该代码嵌入异常内容,否则问题不在于访问该字段。问题正是错误消息所说的:您正在尝试初始化控件的值,但编译器不知道machine.control_signals的编译时间值是什么,所以它可以'创建代码以进行初始化。

换句话说:在C语言中,函数外部的变量初始化(如示例)需要“常量表达式”:编译器可以确定其值的某些内容,以便它可以说明要预加载的内容记忆。您收到错误消息是因为您没有提供常量表达式。

也许您正在考虑如何在运行时使用赋值初始化自动变量(块内定义的变量)。但这不是这里发生的事情。