IAR不支持数组为0
如下图所示IAR编译失败提示 Error: incomplete type is not allowed有大佬能解决嘛?
填0的意思是这个数组没有数组成员? 何苦这么做,没啥意义啊?直接定义u8 def 一样的啊。 变长数组在单片机平台跑是在给自己挖坑,如果后面需要移植或者做其他事哭都来不及,换个实现方式吧 确实要用就将C标准设置为C99及其以上,并打开VLA 1. IAR是支持0长度数组的,只是你写的不对
2. 0长度是GNU扩展,标准定义的可变长度写法不同
struct line {
int length;
char contents;
};
struct flex{ int length; char data[]; }; wm20031015 发表于 2023-8-28 10:28
填0的意思是这个数组没有数组成员?
这个数组长度我们用的是宏定义注册的,可能大于0也可能等于0.使用其他编译器都支持编译,就IAR不行 caicaptain2 发表于 2023-8-28 10:32
何苦这么做,没啥意义啊?直接定义u8 def 一样的啊。
这个数组长度我们用的是宏定义注册的,可能大于0也可能等于0.使用其他编译器都支持编译,就IAR不行 庄永 发表于 2023-8-28 11:09
变长数组在单片机平台跑是在给自己挖坑,如果后面需要移植或者做其他事哭都来不及,换个实现方式吧
没办法大佬。代码就是有这样的用法。可变长数组。 庄永 发表于 2023-8-28 11:17
确实要用就将C标准设置为C99及其以上,并打开VLA
我用的是9.20.2版本只用standrd C了
emwin 发表于 2023-8-28 12:53
1. IAR是支持0长度数组的,只是你写的不对
2. 0长度是GNU扩展,标准定义的可变长度写法不同
调换一下顺序确实可以编译通过了,但是我们的代码就是要为0的在前。我用VScode和QT等编译器都支持这种写法,在IAR这就不支持了。困扰 小钟嵌入式 发表于 2023-8-28 14:15
调换一下顺序确实可以编译通过了,但是我们的代码就是要为0的在前。我用VScode和QT等编译器都支持这种写 ...
C11和C99的柔性数组不都是在最后吗? 因为这样可以避免内存冲突 2360985396 发表于 2023-8-28 14:50
C11和C99的柔性数组不都是在最后吗? 因为这样可以避免内存冲突
我用VSCode是支持的写在前面 小钟嵌入式 发表于 2023-8-28 15:09
我用VSCode是支持的写在前面
那你最好验证下这个支持,仅仅只是没报错而已,结构大小也是常规的内存对齐的结果,截图里的程序基本上啥也没有证明。
另外柔性数组的用处,直接决定了它在数据结构中的位置 小钟嵌入式 发表于 2023-8-28 13:58
没办法大佬。代码就是有这样的用法。可变长数组。
不要给自己挖坑,肯定有替代方案的
1、整个运行期间,长度只需要改变一次,直接malloc一个就行,反正不用free,不存在什么内存碎片
2、整个运行期间,长度在不断改变,最好使用其他方法来处理;实在不行移植一些性能比较好的内存管理算法比如tlsf这样的,也比这个强 小钟嵌入式 发表于 2023-8-28 14:01
我用的是9.20.2版本只用standrd C了
这个勾选就足够了,还不能便宜那就要看一下编译器差异了,这个反而说明你使用变长数组的一个大缺陷 小钟嵌入式 发表于 2023-8-28 15:09
我用VSCode是支持的写在前面
IAR 和 GCC还是有差异的,你要在单片机上面运行的代码想和gcc一样的使用语法,至少得用gcc for arm来变异单片机代码
页:
[1]