2016-08-05 9 views
0

次のように、変数を宣言するマクロを書くことはその可能性:もちろんRustの変数を宣言するマクロ? Cでは

#define VARS(a, b, c) \ 
    int a, b, c; 

これは、あなたが一般的にやりたいと思いますものではありません。

実際の例では、私は非常に単純ではない作業を得るために探しています。

#define VARS(data, stride, a, b, c) \ 
    MyStruct *a = &data.array[0],   \ 
    MyStruct *b = &data.array[1 * (stride)], \ 
    MyStruct *c = &data.array[2 * (stride)]; 

ただし、割り当ての正確な詳細はこの質問の目的には関係ありません。

錆にこのようなマクロを書くことはできますか? もしそうなら、これはどのように書かれますか?

答えて

1

錆で、このようなマクロを書くことが可能です:

macro_rules! vars { 
    ($data:expr, $stride:expr, $var1:ident, $var2:ident, $var3:ident) => { 
     let $var1 = $data[0]; 
     let $var2 = $data[1 * $stride]; 
     let $var3 = $data[2 * $stride]; 
    }; 
} 

fn main() { 
    let array = [1, 2, 3, 4, 5]; 
    let stride = 2; 
    vars!(array, stride, a, b, c); 
    println!("{}", a); 
    println!("{}", b); 
    println!("{}", c); 
} 

詳細についてはMacros chapter in the bookを読みます。

関連する問題