Description
At the end of Rust Book chapter 5.27 const
and static
is the following extract:
A
const
can be thought of as a#define
in C: it has metadata overhead but it has no runtime overhead. “Should I use a#define
or astatic
in C,” is largely the same question as whether you should use aconst
or astatic
in Rust.
Unfortunately, this is rather misleading. An experienced C programmer will try and avoid #define
as much as possible (they do have their use) because:
- a
#define
is unscoped, and the C preprocessor is just a text preprocessor - a
#define
is untyped
You can check constants - "static const" vs "define" in C for more context and relevant advices; specifically Jonathan Leffer's answer (yep, just skip mine). Note: in C++, the answer is static const
because C++ lifts a lot of restrictions for where one can use static const
variables.
Since in Rust const
is scoped and typed, it is really no equivalent to #define
. It is, however, much closer to enum
.
Maybe simply comparing to enum
instead of #define
would avoid confusing the reader?