在Rust中指定数组大小时,C##define的等价物是什么?

时间:2016-03-14 15:52:23

标签: rust

我开始学习Rust,我有一个C语言背景。

我正在尝试将以下代码段从C转换为Rust。该代码定义了一个uint8_t数组,其大小在编译时定义。

#define GRID_SIZE  100

uint8_t grid[GRID_SIZE];
memset (grid, 0x00, GRID_SIZE);

我在Rust

中尝试了以下内容
let grid_size: i32 = 10;
let mut grid: [i32; grid_size] = [0; grid_size];

编译器抱怨error: use of undeclared type name `grid_size` [E0412]

查找错误E0412并未向我提供任何线索。这可能在Rust吗?

1 个答案:

答案 0 :(得分:5)

Rust只允许编译时固定大小的数组(内存中相同大小的事物的动态大小跨度称为切片,只能通过引用到另一个容器,如Vec)。此外,在实例化它们时,它需要像usize这样的无符号类型,而不是i32。尝试

const GRID_SIZE: usize = 10;

fn main() {
    let mut grid: [i32; GRID_SIZE] = [0; GRID_SIZE];
}