使用#define 定义数组大小

Use #define to define an array size

我曾经从一个以 125 SPS 发送样本的 ADC 捕获 5 秒的数据,这转化为一个大小为 5 * 125 的数组。在我的代码中,它看起来像:

#define SPS 125
#define TIME 5

char Samples[SPS * TIME];

现在,我想捕获 2.5 秒的数据并将 ADC 采样率提高到 250 SPS。在代码中它看起来像:

#define SPS 250
#define TIME 2.5

char Samples[SPS * TIME];

但是如果我这样做,编译器会抛出一个错误:

#901 expression must have integral or enum type main.cpp line 59 C/C++ Problem

我能听懂它在说什么。

但是克服这种情况的最佳方法是牢记 SPS 和 TIME 定义的可用性。我的意思是我在整个项目的其他几个地方使用了它们,我希望继续按原样使用它们。

请帮忙!

问题是结果转换为float(或double),但数组的大小必须是整型。最简单的解决方案是@CoolGuy 所建议的,您可以将其转换为 int。这是一个例子

#define SPS 125
#define TIME 2.5

char Samples[ (int)(SPS * TIME) ];

您尝试过转换为 unsigned int 吗?

char Samples[(unsigned int)(SPS * TIME)];

我假设这是一个嵌入式系统,所以您可能不想为此使用浮点数,因为这样做通常会迫使您 link 项目的浮点库。

浮动免费版本:

#define SPS       250ul
#define TIME_MS   2500ul
#define SAMPLES_N ( (SPS * TIME_MS) / 1000ul )

char Samples[SAMPLES_N];

如果你坚持使用float:

#define SPS        250
#define TIME       2.5
#define SAMPLES_N  ((unsigned long)(SPS * TIME))

char Samples[SAMPLES_N];

(这两个代码片段适用于所有平台,包括小型 8/16 位 MCU 应用程序。与所有发布的使用 int 的答案不同,后者不可移植。)