问题标签 [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.
customization - 为 Eclipse CDT 定制 include-guard
我想要通过使用 Eclipse/CDT 创建一个新的 C++ 类来自动生成包含保护,但我找不到任何方法来更改${include_guard_symbol}
属性。
我的愿望是一个包含如下命名空间前缀的包含守卫:
但如果我使用#ifndef ${namespace_name}_${include_guard_symbol}
它,它将产生:
我怎样才能做到这一点?
c - 在 C 中创建自己的头文件
谁能用一个简单的例子从头到尾解释如何在 C 中创建头文件。
shell - Shell脚本中是否有类似C++中“包含守卫”的机制?
让我们看一个例子:在我的 main.sh 中,我想获取 a.sh 和 b.sh。然而,a.sh 可能已经采购了 b.sh。因此它会导致 b.sh 中的代码执行两次。C++ 中是否有任何类似“包含守卫”的机制?
c++ - 哪个先出现?标头守卫、命名空间和包含
我一直在制作这样的文件:这个顺序有意义吗?或者应该交换命名空间和#includes 以及为什么。
c++ - 双包含解决方案?
在 C++ 中,我遇到了双重包含的问题:
文件 stuffcollection.h
文件阶段.h:
编译器错误:
\Stuffcollection.h|(line were bool myfunc is declared)|error: 'Stage' has not been declared|
||=== Build finished: 1 errors, 0 warnings ===|
有人可以解释为什么会发生这种情况以及如何解决吗?我已经使用了包含警卫和 pragma once 预处理器指令,但它不起作用。
(如果我#include "Stuffcollection.h"
从 stage.h 中删除并注释掉在 stage.cpp 中使用它的相应行,我的其余代码工作正常。实际上只是在将 Stuffcollection 包含到阶段时它突然停止工作。)
PS:stage 只是一个例子,我几乎在所有其他文件中都使用了 stuffcollection,每次遇到这个问题。
编辑:我遵循了建议,现在问题是invalid use of incomplete type
,即虽然给出的答案解决了循环依赖的问题,但它们并没有解决我正在处理的问题。我的问题在Circular Dependencies / Incomplete Types中继续存在。
编辑:现在都解决了。
c - 标题/包含警卫不起作用?
出于某种原因,即使我使用了标头保护,我也会在我的头文件中获得多个内容声明。我的示例代码如下:
主.c:
东西.c:
东西.h:
当我尝试编译它时,GCC 说我对 something 变量有多个定义。ifndef 应该确保不会发生这种情况,所以我很困惑为什么会这样。
c++ - 无尽的包含循环
可能重复:
C 头文件循环
原始问题:
我总是无法理解为什么以下内容会出现错误:
某事.h
别的东西.h
为什么这会产生错误?
1) SOMETHING_H 未定义
2) SOMETHING_H 被定义,somethingelse.h 被包括在内
3) SOMETHINGELSE_H 未定义,变为已定义,并包含 something.h
4) 定义了SOMETHING_H,跳转到#endif,这应该是结束了吧?
编辑:
事实证明它根本没有给出任何错误。但是,以下内容会:
某事.h
别的东西.h
这是合乎逻辑的,因为当 'somethingelse' 需要该类的实例时,尚未定义类 'something'。
问题通过正向定义解决:
某事.h
在 .cpp 中,您可以包含“somethingelse.h”,并创建该类的实例。
c++ - C++ #include 守卫
解决了
真正帮助我的是我可以#include .cpp 文件中的标头而不会导致重新定义的错误。
我是 C++ 新手,但我在 C# 和 Java 方面有一些编程经验,所以我可能会遗漏一些 C++ 独有的基本知识。
问题是我真的不知道出了什么问题,我将粘贴一些代码来尝试解释问题。
我有三个类,GameEvents、Physics 和 GameObject。我有他们每个人的标题。GameEvents 有一个 Physics 和一个 GameObjects 列表。物理学有一个游戏对象列表。
我想要实现的是我希望 GameObject 能够访问或拥有一个物理对象。
如果我只是在 GameObject 中 #include "Physics.h",我会得到我理解的“错误 C2111: 'ClassXXX' : 'class' type redifinition”。这就是我认为#include-guards 会有所帮助的地方,所以我在我的 Physics.h 中添加了一个包含保护,因为这是我想要包含两次的标题。
这是它的样子
但是如果我现在在我的 GameObject.h 中 #include "Physics.h" 是这样的:
我遇到了多个不明白为什么会出现的问题。如果我不#include "Physics.h" 我的代码运行得很好。
我非常感谢任何帮助。
c++ - 编译速度改进包括保护与预编译头文件
我想减少大型项目的编译时间。我们的主要编译器是 Visual Studio 2010,但有些代码是在 gcc 中编译的。我们目前正计划确保我们所有的 .h 文件都包含保护以及 #pragma once,这将允许 Visual Studio 和 gcc 提高编译速度。以前我们在 stdafx 中放置了更多头文件,但我们看到了缺点,如果其中一个头文件被更改,并且您编译了一个 cpp 而不重新编译预编译头文件,那么更改不会生效。这常常使我们感到困惑。目前的计划是对所有稳定的头文件或我们无法控制的头文件(它们不会更改)使用预编译的头文件,而对于其他所有内容,使用包含保护和#pragma once 以帮助提高编译速度。这条路规划不善有什么原因吗?包含警卫/#pragma once 与我缺少的预编译头或反之亦然的编译速度是否有好处?
c++ - C 包括后卫
当第一次file1.c
包含inc.h
(包含包含保护#ifndef INC_H
)时,#define INC_H
执行。但是现在,当另一个file2.c
包含相同inc.h
的宏时,是否INC_H
已经定义了宏,这都是同一个故事,以前的定义没有在这里传播?