问题标签 [include-guards]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
739 浏览

c++ - 在 C 和 C++ 中,为什么每个 .h 文件通常都被 #ifndef #define #endif 指令包围?

为什么每个 .h 文件都以 #ifndef #define #endif 开头?我们当然可以在没有这些指令的情况下编译程序。

0 投票
4 回答
33178 浏览

c - 变量定义应该在头文件中吗?

我最近对​​C和编译过程 的基本知识已经生疏了。我试图找出以下问题的答案,但无法连接编译、链接和预处理阶段的基础知识。在谷歌上快速搜索也没有多大帮助。所以,我决定来到知识的终极来源:)

我知道:不应该在 .h 文件中定义变量。可以在那里声明它们。

原因:因为头文件可能会从多个位置包含在内,因此多次重新定义变量(链接器给出错误)。

可能的解决方法:在头文件中使用 header-guards 并在其中定义变量。

这真的是一个解决方案吗:不。因为标头保护用于预处理阶段。就是告诉编译器这部分已经包含了,不要再包含了。但是我们的多重定义错误出现在链接器部分——在编译之后。

这整件事让我对预处理和链接的工作方式感到困惑。我认为如果已定义标头保护符号,预处理将不包含代码。在那种情况下,不应该解决变量问题的多重定义吗?

这些预处理指令使编译过程免于在标头保护下重新定义符号,但链接器仍然获得符号的多个定义,会发生什么?

0 投票
3 回答
2521 浏览

c++ - 多余的包括警卫是必要的吗?

Codegear RAD Studio 2009 中是否需要“冗余包括警卫”?编译器是否足够聪明,可以自己处理这个问题?

例如,我可能在 foo.h 中有以下“包含守卫”:

以及 use_foo.h 中的以下“冗余包含守卫”:

此外,如果编译器不够聪明,如果它们被包含在源文件中,是否需要“冗余包含保护”。例如use_foo.cpp。?

0 投票
2 回答
1937 浏览

javascript - 有没有防止jQuery被重新定义的好方法?

我遇到了一个问题,我花了一些时间来调试我用于 jQuery 的插件(在本例中为 jFeed)不起作用。问题最终是因为我们还使用了Amazon Associates 产品预览。产品预览代码最终通过 document.write() 包含许多其他 JS 文件,包括另一个 jQuery 副本。因为产品预览代码出现在 jFeed 脚本下方,所以重新定义了 jQuery,没有使用 getFeed 函数。

是否有最佳实践来确保某些对象(如 jQuery)只在页面上定义一次?我正在考虑使用 C/C++ 的 #ifndef 之类的东西,但我不知道在我没有编写再次动态拉入 jQuery 的代码的情况下它会如何工作。

0 投票
4 回答
4707 浏览

c++ - C++ 中的模板类和包含守卫

在模板类周围包含守卫是否明智?

每次使用不同的实现引用模板类时,不应该重新解析它们吗?

注意在 Visual C++ 2008 中,将两者结合起来没有错误...

0 投票
1 回答
183 浏览

c++ - 关于条件编译 (ifndef) 的快速问题

这很可能是一个非常愚蠢的问题,但我需要确定。我在头文件中得到了一个类声明,例如。

并且我被要求在同一个文件中编写方法定义,我已经这样做了,我的问题是“#endif”是在类声明之后保持在它的位置还是在我的文件末尾之后类方法定义?

0 投票
6 回答
1480 浏览

c++ - C++ Header Guard 问题

我正在制作一个小型 C++ 框架,其中包含许多 .h 和 .cpp。

我创建了一个通用包含,其中包括我所有的 .h 文件,例如:

每个 .h 标头都受包含保护,例如

问题是,我希望能够在所有子 .h 中包含“framework.h”,但它会导致很多编译器错误:

相反,如果我为每个子标题使用真正的头文件,而使用我的框架的 framework.h 则可以正常工作..

我只想在我的所有子 .h 中包含主标题,所以我不需要每次都包含所有依赖项。

谢谢 :)

0 投票
2 回答
10011 浏览

c++ - 头后卫的目的

在 C++ 中,C++ 程序中标头保护的目的是什么。

从网上我发现这是为了防止一次又一次地包含文件,但标题保护如何保证这一点。

0 投票
3 回答
192 浏览

php - 保护一个类免受另一个类的不良编程?

PHP中有没有办法尝试包含一个文件,但是如果文件包含阻止它编译的错误,只是跳过包含该文件?

0 投票
4 回答
2121 浏览

c++ - 在 C++ 中,“_MOVE_H”有什么特别之处?

我有一个像这样的 C++ 文件

令我惊讶的是,编译器忽略了#ifndef和之间的所有代码(我发誓我没有在其他任何地方定义),并且我有各种关于缺少定义的错误。我在想我做错了什么,但是当我尝试使用另一个键时(比如,一切都恢复正常了。在 C++ 中是否意味着一些特殊的东西?#endif_MOVE_H_MOVE_Ha_MOVE_H

如果这很重要,我正在运行 Ubuntu 10.04、GCC 4.4.3。

谢谢,