Naming Include Guards

I personally follow Boost’s recommendation. It’s perhaps one of the largest collection of C++ libraries of good quality around and they don’t have problem.

It goes like:

<project>_<path_part1>_..._<path_partN>_<file>_<extension>_INCLUDED

// include/pet/project/file.hpp
#ifndef PET_PROJECT_FILE_HPP_INCLUDED

which is:

  • legal (note that beginning by _[A-Z] or containing __ is not)
  • easy to generate
  • guaranteed to be unique (as a include guard) within a project (else you have two files at the same place)
  • guaranteed not to be used for anything else (if you end another macro with INCLUDED you’re spoiling for a fight)

I’ve read about GUID but those look weird.

And obviously I’d rather than all compilers implement #pragma once (or better, #pragma multiple and “once” be the default behavior…)

Leave a Comment