• Use structs as local namespaces in C code

    struct Engine_Data {     struct State* currentState;     int someFlags; };

    static struct Engine_Data s;

Putting all static vars in a compilation unit into a single struct has advantages:

  • Watching in a debugger is easy since there's a single state variable containing all state
  • Transition from static to reusable objects is much easier since instance data is already encapsulated

    struct Engine_vtable {     int (start)();     int (stop)(); };

    /* Reusable class / struct Engine {     struct Engine_vtable vtable;     struct Engine_Data s; };

    /* Initializer / void Engine_Init(struct Engine e);

    int main() {     struct Engine engine;

        Engine_Init(&engine); }