如何正确命名包括c ++中的警卫

noy*_*o88 0 c++

我有3个头文件:

misc.h
MyForm.h
Registration.h
Run Code Online (Sandbox Code Playgroud)

在misc.h文件中我把

#ifndef MISC_H
#define MISC_H
#endif
Run Code Online (Sandbox Code Playgroud)

在MyForm.h中,我把

#include "misc.h"
#include "Registration.h"
Run Code Online (Sandbox Code Playgroud)

在Registration.h中,我把

#include "misc.h"
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Jes*_*uhl 7

如何命名包括警卫在某种程度上是基于意见,但可以提出一些建议:

1)不要让它们变短,因为它们可能会与其他文件或您使用的实现或库中定义的其他宏发生冲突.

2)使它们包含项目特定的前缀,以使它们具有唯一性和明确性.

3)如果您的项目包含多个子部件"模块"/"库"等,请使防护名称包含模块的名称,以使其在项目中唯一 - 包括文件名.

4)确保不使用保留名称,例如以NULL数字开头的名称或以下划线后跟大写字母开头的名称以及包含连续下划线的名称; 所有这些名称都保留供实现使用.

5)对宏使用全部大写(只是一个常见的约定).

对于名为"foo"的项目中名为"baz.h"的文件,在子模块"bar"中,我将为防护命名FOO_BAR_BAZ_H.

PS.确保所有标题都使用包括警卫(非常特殊和极少数情况除外).否则,您会遇到多个定义错误等问题.


Bas*_*tch 2

您需要在每个标头中放置单独的包含防护,特别是在:MyForm.h

#ifndef MYFORM_H
#define MYFORM_H
#include "misc.h"
#include "Registration.h"
// etc...
#endif /*MYFORM_H*/
Run Code Online (Sandbox Code Playgroud)

并在Registration.h

#ifndef REGISTRATION_H
#define REGISTRATION_H
// actual code
// etc...
#endif /*REGISTRATION_H*/
Run Code Online (Sandbox Code Playgroud)