Why include guards?
Include guards, as defined here , are used to prevent loading the same code twice at compilation. Why can't my compiler (GCC) detect that it is loading the same code twice and have a sensible default behaviour? Simply because you might have wanted the compiler to load that file twice. Remember, that #include simply loads a file and puts its contents in the place of the directive. This file might be a header file, but may be useful and frequently used piece of source code as well. Most modern compilers react to #pragma once doing exactly what you want them to. Remember though, that this is a