Search code examples
ccompile-time-constant

Error in string array initializer: initializer element is not constant


I need to define some strings and an array initialized with those strings available to use by different pieces of the software. I thought in defining them in a header file like this:

//.h file
const char *serviceStateKindNormal = "Normal";
const char *serviceStateKindUnmanned = "Unmanned";
const char *serviceStateKindScheduledMaintenanceDown = "ScheduledMaintenance (down)";
const char *serviceStateKindScheduledMaintenanceAvailable = "ScheduledMaintenance (available)";
const char *serviceStateKindMajorIncidentInProgress = "MajorIncidentInProgress";
const char *serviceStateKindPartialService = "PartialService";
const char *serviceStateKindOverloaded = "Overloaded";
const char *serviceStateKindGoingDown = "GoingDown";
const char *serviceStateKindDown = "Down";

const char *serviceStateKind[9] = {
    serviceStateKindNormal,
    serviceStateKindUnmanned,
    serviceStateKindScheduledMaintenanceDown,
    serviceStateKindScheduledMaintenanceAvailable,
    serviceStateKindMajorIncidentInProgress,
    serviceStateKindPartialService,
    serviceStateKindOverloaded,
    serviceStateKindGoingDown,
    serviceStateKindDown
};

but the compiler shows

error: initializer element is not constant
     serviceStateKindNormal

what exactly is the problem here and what choices do I have to define my variables?


Solution

  • In C language constant refers to literal constants, like (3.14, 2.718, etc). Const-qualified objects (of any type) are not constants in C language terminology.

    For creating constants in C language terminology use #define directive, for example:

    #define ServiceStateKindNormal "Normal"

    etc.