This question是讨论C ++包含保护的命名约定的几种方法之一。问这个问题的人认为该命名约定:

#ifndef FOO_H
#define FOO_H

// ...

#endif


单独使用时有点不直观(FOO_H是什么意思?),我倾向于同意。

其他人说,除非需要添加更多的东西以更好地避免碰撞(如PROJECTNAME_FOO_H_SDFFGH69876GF),名称FOO_H很好,因为从上下文可以清楚地知道其目的是什么(即,它位于文件的开头)。的名称相同,很明显,它是一个包含卫队。

如果拥有FOO_H的唯一目的是防止多重包含,那么我可以购买此产品,但是在某些情况下我希望文件中其他位置具有FOO_H吗?我认为条件编译将是一个很好的理由,在这种情况下,将其命名为FOO_H_INCLUDED会更清楚。

是否有与此类似的直接用途,还是应该避免重新使用包含保护程序?

最佳答案

我认为这个问题本身就是有缺陷的。术语“包括防护”是指#define并在防止多重包含的特定用途中检查#defined,这是唯一的用途。

现在更笼统地说,定义和条件编译可以用于其他用途,例如编写依赖于平台的代码,并且仅在某些情况下才可以编译...

无论是FOO_H还是FOO_H_INCLUDED更好,我总是会说后者是最有表现力的,然后我将返回vi并在下一个FOO_H标头中键入foo.h。同样,正如我在对另一个问题的评论中提到的那样,您已经习惯了这种模式:

#ifndef XXXXXXXXX
#define XXXXXXXXX

#endif


作为文件的前两行和最后一行,您会注意到。如果您重复使用了相同的名称,直到被咬回为止。

关于c++ - C++的有效用法还包括保护措施,包括保护措施吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4868227/

10-11 22:45
查看更多