13

In C its possible to write a macro that declares variables, as follows:

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

Of course this isn't something you'd typically want to do.

In the actual example I'm looking to get working its not quite so simple.

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

However the exact details of assignment shouldn't matter for the purpose of this question.

Is it possible to write a macro like this in Rust? If so how would this be written?

1 Answer 1

17

It is possible to write such a macro in Rust:

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); } 

Read the Macros chapter in the book for more information.

Sign up to request clarification or add additional context in comments.

1 Comment

The macros chapter in the new book is here.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.