我正在使用IAR Systems的EWARM 6.6,得到以下编译错误,我无法解释。
void testFunc(uint8_t* buf, uint8_t length)
{
struct
{
uint8_t start;
uint8_t data[length];
uint8_t stop;
}longframe;
longframe.start = 1;
memcpy( longframe.data, buf, length );
longframe.stop = 2;
}编译器抛出错误消息:"ErrorPe028: expression必须有一个常量值“。如果变量声明为静态或全局,这是可以接受的,但在这种情况下,我不知道。我用GCC编译器尝试了相同的代码,它工作得很好。有人有什么想法吗?
被批评的部分是结构中的数据长度。它说长度必须是恒定的。
发布于 2013-10-25 05:00:18
编译器正在抱怨具有可变大小的数组的结构定义。您可以通过在项目选项中将您的语言从C切换到C++来实现这一点。最好的办法是首先使用可变大小的数组,但这在很大程度上取决于您实际要完成的任务。
发布于 2017-03-22 06:44:43
在IAR Systems,Embedded Workbench 7.2中,对于iccarm.exe C/C++编译器,我遇到了同样的问题。当我试图在堆栈上分配一个由函数参数设置的长度的数组时,我得到了一个错误的Pe028。
文档here建议将--vla添加到我的CFLAGS (iccarm.exe --vla ...),这对我很有效。
发布于 2017-03-22 16:33:34
C标准(我想在C99之前,尽管有人可能会纠正我)不允许用长度作为变量来声明数组。
然而,在项目选项下的C/C++编译器,语言1标签,选择C99和“允许VLA”复选框,您的问题将得到解决。
https://stackoverflow.com/questions/19519900
复制相似问题