#endif GUARD_H好习惯吗?

1 c++ directive conditional-compilation

考虑一下:

#ifndef GUARD_H
#define GUARD_H
...
#endif GUARD_H
Run Code Online (Sandbox Code Playgroud)

而不是:

#ifndef GUARD_H
#define GUARD_H
...
#endif // GUARD_H
Run Code Online (Sandbox Code Playgroud)

我常常看到#endif一个"标识符"已注释掉,但没有评论它仍然有效.

一切都是在#endif悔改之后还是......?

Jam*_*lis 11

不,这不是有效的C++:它是不正确的.# endif终止预处理指令行的换行符和换行符之间不能有令牌.

如果要从#if指令重述条件,可以在注释中执行此操作:

#endif // GUARD_H
Run Code Online (Sandbox Code Playgroud)

然而,这实际上是多余的,特别是对于包含警卫:如果它#endif是头文件中的最后一个,那么几乎可以肯定结束#ifdef顶部使用以防止多个包含,不是吗?

在其他可能有多个嵌套级别的条件指令的地方,这可能很有用,但即使这样,通常最好重构代码以使其更简单或更直接.