Naming Include Guards

前端 未结 9 1286
忘了有多久
忘了有多久 2020-11-29 08:37

How are C++ include guards typically named? I tend to see this a lot:

#ifndef FOO_H
#define FOO_H

// ...

#endif

However, I don\'t think

9条回答
  •  余生分开走
    2020-11-29 08:59

    As others mentioned before, a very common convention is to use the uppercase version of the name, and the dot replaced by an underscore: foo.h -> FOO_H

    However, this can lead to name collisions with simple and/or common names. For this reason, autogenerated header like the stdafx.h in non-empty Visual C C++ projects append some random string, like:

    #ifndef FOO_H__NsknZfLkajnTFBpHIhKS
    #define FOO_H__NsknZfLkajnTFBpHIhKS
    #endif
    

    http://www.random.org/strings/ is a useful random generator for this.

    Also, if the file is part of some submodule, or its contents reside in one specific namespace, I tend to add that to the guard too:

    #ifndef SOMECOMPONENT_FOO_H__NsknZfLkajnTFBpHIhKS
    #define SOMECOMPONENT_FOO_H__NsknZfLkajnTFBpHIhKS
    
    namespace somecomponent
    {
      ...
    }
    
    #endif
    

提交回复
热议问题