About
I'm a freelance C developer based near Manchester, undertaking work for clients across the UK, Channel Islands and Isle of Man (and further afield, if you have a UK subsidiary I can contract with).
I started writing C at university and moved on to solve the Advent of Code and Project Euler puzzles.
Code quality and standards
My starting point for compiling code is: -Wall -Wextra -Werror
, i.e. all the important warnings, forced into errors so they can't be ignored. If there is a good reason to disable a particular warning I will do so, but my first approach is to try and fix the code (this isn't always possible when it has been provided by a third party).
In addition to compiler warnings, I also use the Cppcheck static analysis tool with the following options:
--enable=all
: Enable all checks initially--suppress=unusedFunction
: Ignore unused functions as Cppcheck cannot always identify what functions are in use (e.g. thesetUp
function used by Unity)--suppress=missingInclude
: Ignore missing include files as Cppcheck cannot always find these and the compiler will emit an error if an include file cannot be found
For C standards I use whatever is required by the client / project. C89 gives the most portability, however it does lack some useful features, so I generally recommend C99 as a minimum unless there is a good reason to prefer C89.
Testing
Testing is a key part of the development process for me, as it forces me to break down functionality into small parts and then write multiple tests for each function. My test framework of choice is Unity, although I am happy to work with others if a project already has automated tests.
I make automated tests a mandatory part of the build process - if a test fails then the code should not be shipped.