Question: In C, is there a nice way to track the number of elements in an enum? I've seen

```
enum blah {
    FIRST,
    SECOND,
    THIRD,
    LAST
};

```

But this only works if the items are sequential and start at zero.

Answer: 
I know this is a very old question, but as the accepted answer is wrong, I feel compelled to post my own. I'll reuse the accepted answer's example, slightly modified.
(Making the assumption that enums are sequential.)

```
// Incorrect code, do not use!
enum blah {
  FIRST   =  0,
  SECOND, // 1
  THIRD,  // 2
  END     // 3
};
const int blah_count = END - FIRST;
// And this above would be 3 - 0 = 3, although there actually are 4 items.

```

Any developer knows the reason: `count = last - first + 1`.
And this works with any combination of signs (both ends negative, both positive, or only first end negative). You can try.

```
// Now, the correct version.
enum blah {
  FIRST   =  0,
  SECOND, // 1
  THIRD,  // 2
  END     // 3
};
const int blah_count = END - FIRST + 1; // 4

```

Edit: reading the text again, I got a doubt. Is that `END` meant not to be part of the offered items? That looks weird to me, but well, I guess it could make sense...
```
int enaumVals[] =
{
FIRST,
SECOND,
THIRD,
LAST
};

#define NUM_ENUMS sizeof(enaumVals) / sizeof ( int );

```