STM32 学习之不定长数组的定义

通常情况下,keil、IAR 在定义数组的时候,都是需要指定数组的长度,但是我们大多数情况下是不知道我们输入的数据可能会有多长。
所以为了尽可能的包含所有的情况,通常的做法就是在定义数组的时候,将数组的长度定义的非常长。结果就会导致多数情况下,大量的内存空间被浪费了。

其实在C99新增的标准中是有关于这个的定义的,而且Keil和IAR 也是支持的。

下面我们来看看具体的实现方法:
一、在Keil 中的设置方法
在Keil4.7编译配置管理的c/c++选项卡中Misc control中填写 --c99(或者 --gnu 此方法还未测试)
如图
在这里插入图片描述
在linker选项卡中删除Misc control中的数据
在这里插入图片描述

在keil5编译配置管理的c/c++选项卡中选中 c99 Mode
在这里插入图片描述
在linker选项卡中删除Misc control中的数据
如图 在这里插入图片描述
这样的话,编译就能不报错,通过了…

二、在IAR 中的设置方法
在options->C/C++ Compiler的C dialect 选中 Allow VLA即可。
如图
在这里插入图片描述

ok! 经过以上的设置,就可以不考虑数组长度的问题了!哈哈哈~~

IAR 中的选中 Allow VLA, 以及在Keil 设置项Misc control 中填入 -gnu ,两种方法并未实际测试过,如有哪位同仁用过或者测试了,还请在下方的评论区,留言测试的结果。
谢谢了!!

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在单片机中,由于内存资源比较有限,一般不能像PC机上那样使用动态内存分配的方式定义不定度的数组。但是,可以通过预定义一个足够大的数组,来满足实际需求。 下面以STM32单片机为例,演示如何定义一个不定度的数组: ``` #include "stm32f10x.h" #define MAX_SIZE 100 // 定义数组的最大度 int main() { int array[MAX_SIZE]; // 定义一个足够大的数组 int n, i; printf("请输入数组度:"); scanf("%d", &n); if(n > MAX_SIZE) { printf("数组度超过最大值\n"); return 1; } printf("请输入数组元素:\n"); for(i = 0; i < n; i++) { scanf("%d", &array[i]); } printf("数组元素为:\n"); for(i = 0; i < n; i++) { printf("%d ", array[i]); } printf("\n"); return 0; } ``` 在上面的代码中,首先定义了一个足够大的数组`array`,然后使用`scanf`函数读入用户输入的数组度`n`,并进行判断,如果`n`超过了最大值`MAX_SIZE`,则输出错误信息并退出程序。如果`n`没有超过最大值,则使用for循环读入用户输入的n个整数,并将它们存储到数组`array`中,最后使用for循环输出数组中的元素。 需要注意的是,在单片机中,由于内存资源非常有限,因此需要特别注意数组度的定义和内存的使用,避免出现内存不足或者数组越界等问题。同时,在实际开发中,也需要根据具体的需求选择合适的数据结构来存储数据,避免不必要的内存开销和性能损失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值