Metric Panda Games

One pixel at a time.

From C++ To C

Rival Fortress Update #41

Over the past couple of months I’ve been working as a consultant on an embedded project written in C99 and I’ve been toying with the idea of transitioning the codebase of Rival Fortress from C++ to plain C.

As I hinted in a previous post I’m not a big fan of most of the features that C++ offers, and in the past month I realized how much I enjoy the bare bones feel of coding in plain C.

This weekend I decided to bite the bullet and changed the build script flag from -std=c++11 to -std=c99.

To my surprise porting the game to C didn’t take too long: I was done in a couple of days.

Bye bye overloading

One of the “features” of C that I never thought I would come to appreciate is the lack of function overloading.

Like many Linux programmers, my home is in the shell, and being able to grep the codebase for a function name and having it return a list of all the exact call sites has been proven to be very useful in more than one occasion.

The lack of operator overloading does make to code very verbose at times, but I’m the kind of guy that likes long variable and function names, so that’s a plus for me.

Surprise compile times

Another surprise was the speed up in compilation time. I wasn’t expecting much as I was already light on bloaty C++ features, but after the port the compilation time went from 0.9 seconds to 0.7 in debug mode.

The codebase is currently at about 95k lines of code for the game and engine plus about 15k for the development tools. Every executable is compiled as a single compilation unit with GNU Make.