'static const' vs. '#define'

c, c++, constants

Solution

Personally, I loathe the preprocessor, so I'd always go with `const`.

The main advantage to a `#define` is that it requires no memory to store in your program, as it is really just replacing some text with a literal value. It also has the advantage that it has no type, so it can be used for any integer value without generating warnings.

Advantages of "`const`"s are that they can be scoped, and they can be used in situations where a pointer to an object needs to be passed.

I don't know exactly what you are getting at with the "`static`" part though. If you are declaring globally, I'd put it in an anonymous namespace instead of using `static`. For example

namespace {
   unsigned const seconds_per_minute = 60;
};

int main (int argc; char *argv[]) {
...
}

Problem

Is it better to use `static const` variables than `#define` preprocessor? Or does it maybe depend on the context? What are advantages/disadvantages for each method?

Original source

Related problems