Source: https://www.math.utah.edu/computing/compilers/c/Kernighan-CTutorial.pdf