问题标签 [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 投票
4 回答
275 浏览

c - 在 C 编辑器中自动定义...为什么?

Eclipse在 C 项目中创建一个新文件(.c.h文件)时,编辑器总是在文件顶部自动创建一个,如下所示:如果文件名为“myCFile.c” ,则开头#define会有一个#define像这样的文件

我也看到其他编辑器也这样做(我认为是 Codewright 和 SlikEdit)。似乎对编辑器#defines没有任何作用,因为我可以毫无问题地删除它们,而且我想不出 想使用它们的原因。有谁知道他们为什么在那里?

0 投票
11 回答
14361 浏览

c - C 头文件循环

我有几个头文件,归结为:

树.h:

和元素.h:

问题是它们都相互引用,所以树需要包含元素,元素需要树包含。

这不起作用,因为要定义“树”结构,元素结构必须是已知的,但要定义元素结构,树结构必须是已知的。

如何解决这些类型的循环(我认为这可能与“前向声明”有关?)?

0 投票
33 回答
253396 浏览

php - 防止直接访问 php 包含文件

我有一个 php 文件,我将专门用作包含。因此,当通过键入 URL 而不是被包含在内直接访问它时,我想抛出一个错误而不是执行它。

基本上我需要在 php 文件中进行如下检查:

是否有捷径可寻?

0 投票
4 回答
20334 浏览

linux - 抑制 gcc 警告:“警告:这是先前定义的位置”

我需要一组围绕标准系统调用的包装器——open、listen 等。对于这些,我有一些“#define”,如:

但是当我编译头文件和相关的 .c 文件时,我收到以下警告:

/jcl_wrappers.h:114:1: warning: "open" redefined
/jcl_wrappers.h:113:1: warning: 这是之前定义的位置

我怎样才能抑制这些警告?

0 投票
15 回答
202940 浏览

c++ - #pragma once 是安全的包含守卫吗?

我读过在使用时有一些编译器优化#pragma once可以加快编译速度。我认识到这是非标准的,因此可能会造成跨平台兼容性问题。

这是大多数现代编译器在非 Windows 平台 (gcc) 上支持的东西吗?

我想避免平台编译问题,但也想避免后备守卫的额外工作:

我应该担心吗?我是否应该为此花费更多的精力?

0 投票
5 回答
425 浏览

c - C中棘手的包含情况

我有一个名为 cpu.h 的文件,其中包括另外两个名为 register.h 和 addrmode.h 的头文件。在 cpu.h 中定义了一个 cpu_t 结构,这两者包括对其功能的需要。我尝试在另外两个包含文件中包含 cpu.h,但没有包含任何内容。我猜它们不包括在内,因为在 cpu.h 中设置了包含保护。有谁知道如何解决这个问题?

0 投票
2 回答
289 浏览

javascript - 如何在 Google Gears Worker 中包含 javascript 文件(无 DOM 访问权限)

如何在 Worker 的 .js 中包含其他 .js 文件。我发现的每一个 Javascript 的“包含”解决方案都是通过加载到标签中来实现的,这对于 Workers 来说不是一个选项,因为他们无权访问 DOM。

我从您的950087/include-javascript-file-inside-javascript-file看到使用 Ajax 并且eval()会这样做。我可以弄清楚,但如果有一个简单的实现,请指出我的参考实现。

有人在 2007 年在这里http://code.google.com/p/gears/wiki/NewWorkerPoolFeatures?redir=1提出了 WorkerPool.load() 。曾经做过类似的事情吗?

0 投票
2 回答
434 浏览

sas - SAS 宏包括警卫

在其他编程语言(如 C++)中,包含保护用于防止同一代码的多次包含。

在 C++ 中就像这样:

在 SAS 宏函数定义中构建包含保护是否有意义?应该怎么做?

0 投票
9 回答
9784 浏览

c++ - 为什么 C/C++ 的“#pragma once”不是 ISO 标准?

我目前正在做一个大项目,维护所有这些包括警卫让我抓狂!手写是令人沮丧的浪费时间。尽管许多编辑器可以生成包含守卫,但这并没有多大帮助:

  1. 编辑器根据文件名生成保护符号。当您在不同目录中具有相同文件名的标头时,会出现此问题。他们都将获得相同的包括后卫。将目录结构包含在保护符号中需要编辑器采取一些奇特的方法,因为宏中的斜杠和反斜杠并不是最好的选择。

  2. 当我必须重命名一个文件时,我也应该重命名所有包含保护(在 ifndef 中,定义最好是 endif 的注释)。恼人的。

  3. 预处理器充斥着大量符号,却不知道它们的含义。

  4. 然而定义被包含一次,编译器仍然在每次遇到头包含时打开头。

  5. 包含守卫不适合命名空间或模板。事实上,他们正在颠覆命名空间!

  6. 你有可能你的守卫符号不会是唯一的。

当程序在单个目录中包含少于 1000 个标头时,它们可能是可接受的解决方案。但如今呢?它很古老,与现代编码习惯无关。最困扰我的是,这个问题几乎可以通过#pragma once 指令完全解决。为什么不是标准?

0 投票
2 回答
4176 浏览

c++ - 添加包含保护会破坏构建

我将#ifndef..#define..#endif 添加到我的项目文件中,编译器失败。一旦我删除它或在定义中添加任何其他名称,它就可以正常编译。可能是什么问题呢?

听起来文件已经被声明了,但我不知道在哪里。我可以删除它,但我真的很想知道为什么会这样。

还有其他几个错误。

我实际上使用的是 Qt 中的一个示例,“自定义小部件插件示例”。

不同之处在于我将自己的类用于自定义小部件(.h、.cpp 和 .ui 文件)。

它可能与包含 2 个包含的文件有关,尽管示例就是这样做的。