Why do I get an error about the initializer not being a constant?

CodeKingPlusPlus picture CodeKingPlusPlus · Jul 18, 2012 · Viewed 40.3k times · Source

I am using the following code.

const int X_ORIGIN = 1233086;             
const int Y_ORIGIN = -4728071;              
const int Z_ORIGIN = 4085704;
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};

When I compile it, GCC gives me the following error.

Transformations.h:16:1: error: initializer element is not constant

What does that mean? How can I fix my code?

Answer

Jens picture Jens · Jul 18, 2012

Often people are mislead by the naming of the keyword const, implying something of a constant value that can't be changed. In C at least, it means readonly. const qualified objects at file scope are not having the proper constness to serve as array initializers.

As an example for non-constant constness, it is perfectly ok to declare

 const volatile unsigned int milliseconds_since_boot;

being a value that gets updated from outside the compiler's control (think HW register) and that you are not allowed to assign to, i.e. it is readonly.