创建结构实例数组[C]

问题描述:

我正在为嵌入式系统实验室创建一个有限状态机。编译器(我正在使用ARM的Kiel)抱怨我尝试声明一个struct实例的数组。我做错了什么?创建结构实例数组[C]

我的代码(部分):

struct State { 
    unsigned long OutCars; 
    unsigned long OutWalk; 
    unsigned long Time; 
    unsigned long Next[8]; 
}; 

typedef const struct State SType; 


SType FSM[11] = { 
    {0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} }, 
    {0x14, PF1, 50, {goW, goW, goS, goS, goWa, goWa, goWa, goWa} }, 
    {0x21, PF1, 100, {goS, waitS, goS, waitS, waitS, waitS, waitS, waitS} }, 
    {0x22, PF1, 50, {goS, goW, goS, goW, goWa, goW, goWa, goW} }, 
    {0x24, PF3, 100, {goWa, off1, off1, off1, goWa, off1, off1, off1} }, 
    {0x24, OFF, 50, {on1, on1, on1, on1, on1, on1, on1, on1} }, 
    {0x24, PF1, 50, {off2, off2, off2, off2, off2, off2, off2, off2} }, 
    {0x24, OFF, 50, {on2, on2, on2, on2, on2, on2, on2, on2} }, 
    {0x24, PF1, 50, {off3, off3, off3, off3, off3, off3, off3, off3} }, 
    {0x24, OFF, 50, {on3, on3, on3, on3, on3, on3, on3, on3} }, 
    {0x24, PF1, 50, {goWa, goW, goS, goS, goWa, goW, goS, goS} }, 
}; 

错误消息:

...

TableTrafficLight.c(155): error: #67: expected a "}"

{0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} },

...

编辑:原来我已经结束我的发言#define用分号。哎呀。学过的知识。关闭括号之前

+2

没有什么错,你已经显示的代码。 (当然,你还没有展示如何定义所有这些常量。)我建议将该代码和关联的定义放在一个单独的文件中,然后尝试自行编译该文件。通常,C编译器发出的错误消息是由文件中较早的错误(例如缺少分号)引起的。 – user3386109

+1

编译器错误/警告引用特定的源代码行(此处为155)。你应该总是清楚这是哪一行。 – alk

+0

@alk错误消息下显示的行似乎是数组初始值设定项的第一行。 – user3386109

删除最后一个逗号(除去为高亮):

SType FSM[11] = { 
    {0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} }, 
    {0x14, PF1, 50, {goW, goW, goS, goS, goWa, goWa, goWa, goWa} }, 
    {0x21, PF1, 100, {goS, waitS, goS, waitS, waitS, waitS, waitS, waitS} }, 
    {0x22, PF1, 50, {goS, goW, goS, goW, goWa, goW, goWa, goW} }, 
    {0x24, PF3, 100, {goWa, off1, off1, off1, goWa, off1, off1, off1} }, 
    {0x24, OFF, 50, {on1, on1, on1, on1, on1, on1, on1, on1} }, 
    {0x24, PF1, 50, {off2, off2, off2, off2, off2, off2, off2, off2} }, 
    {0x24, OFF, 50, {on2, on2, on2, on2, on2, on2, on2, on2} }, 
    {0x24, PF1, 50, {off3, off3, off3, off3, off3, off3, off3, off3} }, 
    {0x24, OFF, 50, {on3, on3, on3, on3, on3, on3, on3, on3} }, 
    {0x24, PF1, 50, {goWa, goW, goS, goS, goWa, goW, goS, goS} }, //remove this comma 
}; 

变为:

SType FSM[11] = { 
    {0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} }, 
    {0x14, PF1, 50, {goW, goW, goS, goS, goWa, goWa, goWa, goWa} }, 
    {0x21, PF1, 100, {goS, waitS, goS, waitS, waitS, waitS, waitS, waitS} }, 
    {0x22, PF1, 50, {goS, goW, goS, goW, goWa, goW, goWa, goW} }, 
    {0x24, PF3, 100, {goWa, off1, off1, off1, goWa, off1, off1, off1} }, 
    {0x24, OFF, 50, {on1, on1, on1, on1, on1, on1, on1, on1} }, 
    {0x24, PF1, 50, {off2, off2, off2, off2, off2, off2, off2, off2} }, 
    {0x24, OFF, 50, {on2, on2, on2, on2, on2, on2, on2, on2} }, 
    {0x24, PF1, 50, {off3, off3, off3, off3, off3, off3, off3, off3} }, 
    {0x24, OFF, 50, {on3, on3, on3, on3, on3, on3, on3, on3} }, 
    {0x24, PF1, 50, {goWa, goW, goS, goS, goWa, goW, goS, goS} } 
}; 
+3

嗯,没有。 C规范特别允许使用逗号。 – user3386109

+2

@ user3386109:“*允许使用逗号。*”仅限于C99。 – alk

+0

试过了,但他现在已经有效了。另外,编译器没什么好说的。谢谢指出,但可能是这个问题。 – proprol