【发布时间】:2011-02-01 21:36:34
【问题描述】:
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 会更清楚。
是否有与此类似的直接用途,或者我应该避免重新利用包含守卫?
【问题讨论】:
-
我不会管它的。这感觉就像“如果它没有损坏,请继续修复它直到它损坏”类型的情况之一。
-
这就是为什么我更喜欢
#pragma once -
@James:
#pragma once不允许您按照 OP 提及的方式进行有条件地编译。 -
@James:有些人更喜欢标准保证工作的解决方案。
-
@David:我想知道,像
#pragma once这样的东西是为 C++0x 提议的吗?
标签: c++ c-preprocessor include-guards