拥有自己的标题与标准标头相同的标题是不确定的

Is it undefined behavior to have your own header with the same name as a standard header?

本文关键字:标题 不确定 自己的 标准 拥有      更新时间:2023-10-16

我已经意识到,多年来,我都有自己的标题名为 algorithm.h

我始终将其包含在:

#include "algorithm.h"

而不是包含标准标题:

#include <algorithm>

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

如果它不是不确定的行为,是否被认为是不良风格?

不,这不是不确定的行为。该标准除了标准库的一部分外,没有任何其他标题。实际上,它甚至指定(C 11,第16.2.3节[cpp.include]),如果您要做

之类的事情
#include "algorithm"

找不到标头,然后它与

相同
#include <algorithm>

是否有名为algorithm.h的标题是不好的样式。我会避免使用它,因为它可能会使程序员在C 方面的经验较少。但是,如果您问我,例如utils/algorithm.h会很好。

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

当您用引号包围文件

时,发生了什么事
#include "algorithm.h"

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

当您用括号包围文件时,

#include <algorithm>

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

因此,两个标头文件都包含在内。但是,您确实需要提防在单独的标头文件中定义的变量的覆盖。

希望这会有所帮助!