Skip to content

Unfortunate comparison between const and #define in Rust Book 5.27 #25573

Closed
@matthieu-m

Description

@matthieu-m

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 a static in C,” is largely the same question as whether you should use a const or a static 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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions