当我以下列方式声明typedef时:
typedef struct
{
uint8 LastState;
uint8 CurrentState;
uint8 NextState;
uint8 TaskEnabled;
uint8 Counter;
uint8 Status;
}SM_tstTaskStateStructure;
我尝试定义我尝试创建以下方式的数组的内容:
#define xInitDataTable \
{IDLE,IDLE,IDLE,YES,TIMED7SEG,IDLE}, \
{IDLE,IDLE,IDLE,YES,TIMELED1,IDLE}, \
{IDLE,IDLE,IDLE,YES,TIMELED2,IDLE}, \
{IDLE,IDLE,IDLE,YES,TIMELED3,IDLE}, \
{IDLE,IDLE,IDLE,YES,TIMEBTN,IDLE}, \
{IDLE,IDLE,IDLE,YES,BASETIME,IDLE}, \
{IDLE,IDLE,IDLE,YES,FREQUPDATE,IDLE}
然后将其初始化为结构数组:
static const SM_tstTaskStateStructure SM__astData[TASKMAX]=
{
xInitDataTable
};
这个编译器是否具体? Fujitsu mc的Softune编译器允许我以这种方式初始化结构数组,而Code Composer Studio则不然。如果是这样,是否有任何类似的方法(如果可能,使用定义)?
**这些只是数字值,没有指针或任何东西。
编辑:没关系,在尝试使用前增量或后增量时与所有成员一起发生
答案 0 :(得分:2)
只要TASKMAX
大于7,这个初始化就完全是标准的。
C11(n1570),§6.7.9初始化
initializer: assignment-expression { initializer-list } { initializer-list , }
如果在增加值时打印错误,那是因为SM__astData
是使用const
限定符声明的。
C11(n1570),§6.5.3.1前缀增量和减量运算符
前缀增量或减量运算符的操作数应具有原子的,合格的, 或不合格的真实或指针类型,并且应是可修改的左值。
如果要执行此类操作,请使用以下声明:
static /* const */ SM_tstTaskStateStructure SM__astData[TASKMAX]=
{
xInitDataTable
};