C ++的有效用途还包括防守,包括防护?
这个问题是讨论C ++命名约定的几个问题之一。提出这个问题的人认为这个命名约定:
#ifndef FOO_H
#define FOO_H
// ...
#endif
单独采取时有点不直观(FOO_H
是什么意思?)我倾向于同意。
其他人说,除非需要添加更多东西以更好地避免碰撞(例如PROJECTNAME_FOO_H_SDFFGH69876GF
),名称FOO_H
就好了,因为从上下文中可以清楚地知道它的目的是什么(即,它位于同名文件的开头)并且很明显它是一个包括警卫队员。
我可以买这个,如果有FOO_H
的唯一目的是防止多重包含,但有条件我想在文件的其他地方有FOO_H
吗?我认为条件编译是一个很好的理由,在这种情况下命名为FOO_H_INCLUDED
会更清楚。
是否有类似于此的直接使用,或者我应该避免重新利用包含警卫?
没有找到相关结果
已邀请:
5 个回复
了驳
s,并且在防止多重包含的特定用途中检查
,这也是唯一的用途。 现在更一般地说,定义和条件编译可以用于其他事情,比如编写与平台相关的代码,并且只会在某些情况下编译... 无论是
还是
更好,我总是说后者是最具表现力的,然后我会回到
并在我的下一个
标题中输入
。同样,正如我在另一个问题的评论中提到的那样,你逐渐习惯了这种模式:
作为文件中的前两行和最后一行,您最终会注意到。如果你重复使用相同的名字,那就等到它回来了......
替秀宝
缮记箔
通常表示一个包含守卫。 我能想到的一件事是检查文件是否已被包含(呃!),这样你就不必自己包含文件了。与前瞻性声明或
相比,我不确定这是否会加快编译速度 在main.cpp中:
在bar.h:
在foo.h中:
诉嘎归亮
舞备联
实际上不是文件包含保护,它只是保护文件的一部分。所以可能不应该在整个文件后面命名。递归包含相同的文件是可以出现这种情况的一种情况。 也就是说,我怀疑即使如此,它的定义应该是非常明显的(无论如何,更明显的是,你正在做的任何棘手的事情并不简单,包括防守)。在任何你看到模式ifndef FOO / define FOO,或者甚至只是fn / fOO /定义很多东西的情况下,一个简单的注释可以使FOO的意义明显,如果它还没有。 如果问题的任何部分是令牌
是否可能用于其他目的:我猜你是否有一个名为
的文件使用
作为包含守卫,那么可以想象与某人的
冲突,包含
,愚蠢的例子,但是如果你在头文件中定义字母的属性,那么认为它们中的一些可能以
结尾并不是荒谬的。 更现实的是,我的项目包含在不同目录中具有相同基本名称的包含文件。 因此,无论背景和再利用的问题,我都不会使用
作为包含守卫。