创建结构实例数组[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
用分号。哎呀。学过的知识。关闭括号之前
删除最后一个逗号(除去为高亮):
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} }
};
嗯,没有。 C规范特别允许使用逗号。 – user3386109
@ user3386109:“*允许使用逗号。*”仅限于C99。 – alk
试过了,但他现在已经有效了。另外,编译器没什么好说的。谢谢指出,但可能是这个问题。 – proprol
没有什么错,你已经显示的代码。 (当然,你还没有展示如何定义所有这些常量。)我建议将该代码和关联的定义放在一个单独的文件中,然后尝试自行编译该文件。通常,C编译器发出的错误消息是由文件中较早的错误(例如缺少分号)引起的。 – user3386109
编译器错误/警告引用特定的源代码行(此处为155)。你应该总是清楚这是哪一行。 – alk
@alk错误消息下显示的行似乎是数组初始值设定项的第一行。 – user3386109