Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22250

"Array index in initialiser exceeds array bounds"

$
0
0

I would like to make use of C99 designated array initialisers to help make my code more self-documenting but I'm running into the problem described below.

Suppose I have a enumeration and an array mapping the enumerants to some other useful data structure, for example:

enum { STATE_IDLE = 0, STATE_WORKING, STATE_PANIC };int32_t const g_stress_levels[3] = {        [STATE_IDLE] = 10,        [STATE_WORKING] = 40,        [STATE_PANIC] = 90};

The above compiles with no warnings with TDM-GCC-32 gcc 4.8.1 and -std=c99. The snippet below does not and instead raises the error "array index in initialiser exceeds array bounds".

enum { STATE_IDLE = 0, STATE_WORKING, STATE_PANIC, TOTAL_STATES };int32_t const g_stress_levels[TOTAL_STATES] = {        [STATE_IDLE] = 10,        [STATE_WORKING] = 40,        [STATE_PANIC] = 90};

The GCC docs state "the index values must be constant expressions, even if the array being initialized is automatic".I've always thought however that enum is a constant expression, so why might this be the case?


Viewing all articles
Browse latest Browse all 22250

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>