2016-03-14 30 views
0

我開始學習Rust並且在C中有一個背景。在Rust中指定數組大小時,C的#define等效於什麼?

我試圖將下面的C代碼片段轉換爲Rust。該代碼定義了一個數組uint8_t,其大小在編譯時定義。

#define GRID_SIZE 100 

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

我曾嘗試在魯斯特

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嗎?

+0

http://stackoverflow.com/q/25474152/155423的潛在副本。 – Shepmaster

+0

數組類型長度無效錯誤消息相關的問題:https://github.com/rust-lang/rust/issues/24414 –

+0

你真的鍵入'[i32 :: grid_size]'或它是'[i32; grid_size]'? –

回答

5

Rust只允許編譯時固定大小的數組(動態大小的內存中相同大小的事物稱爲切片,並且只能通過引用到另一個容器中,例如Vec)。另外,在實例化它們時,它需要一個無符號類型,如usize,而不是i32。嘗試

const GRID_SIZE: usize = 10; 

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

謝謝。這解決了它。我在幾個地方犯了錯誤。首先,我應該使用一個const,以便數組的大小是恆定的。第二個錯誤是Iuse I32而不是USize。 – tehnyit

相關問題