定义结构数组的值

时间:2013-03-16 15:58:56

标签: c microcontroller structure

当我以下列方式声明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则不然。如果是这样,是否有任何类似的方法(如果可能,使用定义)?

**这些只是数字值,没有指针或任何东西。

编辑:没关系,在尝试使用前增量或后增量时与所有成员一起发生

1 个答案:

答案 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  
};