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/