拥有与标准标题同名的自己的标题是不确定的行为?

时间:2014-02-07 20:01:02

标签: c++

我意识到多年来我有自己的标题algorithm.h

我总是把它包括在内:

#include "algorithm.h"

而不是包含标准标题:

#include <algorithm>

我从来没有遇到任何问题(甚至没有gcc中的警告),但我不知道这只是运气。我喜欢我的标题的名称,我不想仅仅出于恐惧而重命名。

如果它不是未定义的行为,它被认为是不好的风格吗?

2 个答案:

答案 0 :(得分:3)

不,这不是未定义的行为。除了属于标准库的标题之外,标准没有说明任何标题。事实上,它甚至指定(C ++ 11,第16.2.3节[cpp.include]),如果你要做类似的事情

#include "algorithm"

并且找不到标题,那么它与

完全相同
#include <algorithm>

是否有一个名为algorithm.h的标题是糟糕的风格是值得商榷的。我会避免它,因为它可能会使编程人员在C ++方面的经验感到困惑。但是,如果你问我,utils/algorithm.h之类的东西会很好。

答案 1 :(得分:2)

这绝对不是很好的风格,你确实很幸运。

当您用引号

包围文件时,会发生什么
#include "algorithm.h"

编译器首先在用户定义的路径中查找标头。

用括号括起文件时,

#include <algorithm>

编译器首先检查系统文件夹中的头文件。

因此包含两个头文件。但是,您需要注意覆盖单独头文件中定义的变量。

希望这有帮助!