Ran into a fun situation today where I was writing some code, and I came across an interesting situation in C++. Now, before I get to the end of this post, I’ll give you the punch-line, Developer stupidity.

So I was working on a exercise where I needed to write some sort of state machine.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

enum STATES{
  STATE_1 = 0,
  STATE_2,
  STATE_3,
  ...
};

/* ... some other code ... */

switch(state) {
case STATE_1:
    // Do something
    state = STATE_2;
    break;
case STATE_2:
    // Do some other stuff
    state = STATE_3;
    break;
case STATE_3:
    // Do the last state of stuff
    // This code never gets called.
    break;
}

In this code STATE_3 is never reached. The code for the enum was working fine, but the state wasn’t being reached. I went over this for a while, until I found out the problem.

1
2

bool state = STATE_1;

The assignment for the state variable had been left over from a previous implementation of the code, and when you set the Boolean value for state = 2;, you get 1, which is true.

Now I don’t expect anyone to be as silly as me and make this mistake, but just in case, learn from my lesson.