In eclipse, whenever I create a new C++ class, or C header file, I get the following type of structure. Say I create header file example.h, I get this:
/*Comments*/
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
/* Place to put all of my definitions etc. */
#endif
I think ifndef is saying that if EXAMPLE_H_ isn’t defined, define it, which may be useful depending on what tool you are using to compile and link your project. However, I have two questions:
-
Is this fairly common? I don’t see it too often. And is it a good idea to use that rubric, or should you just jump right into defining your code.
-
What is EXAMPLE_H_ exactly? Why not example.h, or just example? Is there anything special about that, or could is just be an artifact of how eclipse prefers to auto-build projects?
This is a common construct. The intent is to include the contents of the header file in the translation unit only once, even if the physical header file is included more than once. This can happen, for example, if you include the header directly in your source file, and it’s also indirectly included via another header.
Putting the #ifndef wrapper around the contents means the compiler only parses the header’s contents once, and avoids redefinition errors.
Some compilers allow “#pragma once” to do the same thing, but the #ifndef construct works everywhere.