include-guards相关内容

Eclipse-CDT:在自动生成的包含防护中使用命名空间

是否可以(以及如何)在 Eclipse CDT,在使用 .hpp/.cpp 模板创建新类时? 对我来说,Eclipse 很好地生成了一个带有命名空间的新类,但是包含保护不包含命名空间,所以如果同一个头文件在两个不同的目录中存在两次,则只能包含一个. 在我的例子中,命名空间的名称、Eclipse 项目名称和源目录的名称都是相同的,因此这些可以作为包含保护的前缀的替代方案. 解决方案 ..
发布时间:2022-01-14 23:44:47 Java开发

何时使用包括警卫?

我知道在头文件中使用包含保护是为了防止某些东西被定义两次.不过,使用此代码示例完全没问题: foo.c #include #include #include "bar.h"int main() {printf("%d", strlen("测试字符串"));somefunc("一些测试字符串...");返回0;} bar.h #ifndef BAR_ ..
发布时间:2022-01-11 19:55:44 其他开发

C 包含守卫究竟是做什么的?

我有一个关于 C 中包含守卫的问题.我已经阅读了一些内容,但希望能得到一些澄清. 假设我有一个带有函数定义的头文件“header.h". #ifndef HEADER_FILE#define HEADER_FILE诠释二(无效){返回 2;}#万一 这个头文件有一个包含保护.但是,我对#define HEADER_FILE 实际上在做什么感到困惑.假设我要忘记包含保护,完全忽略添加“#d ..
发布时间:2022-01-11 19:16:54 其他开发

C++ 和 C 中的标头保护

在 LearnCpp.com |1.10 — 预处理器初探.在 Header guards 下,有这些代码片段: 添加.h: #include "mymath.h"int add(int x, int y); 减去.h: #include "mymath.h"整数减法(整数 x,整数 y); main.cpp: #include "add.h"#include “减法.h" 在实 ..
发布时间:2022-01-11 19:16:44 C/C++开发

标题/包含警卫不起作用?

出于某种原因,我在头文件中获得了多个内容声明,即使我使用了标头保护.我的示例代码如下: main.c: #include "thing.h"诠释主要(){printf("%d", increment());返回0;} thing.c: #include "thing.h"整数增量(){返回一些东西++;} thing.h: #ifndef THING_H_#define THING ..
发布时间:2022-01-11 16:56:40 其他开发

在 C 中创建自己的头文件

谁能用一个简单的例子从头到尾解释如何用C创建头文件. 解决方案 foo.h #ifndef FOO_H_/* 包括保护 */#define FOO_H_int foo(int x);/* 一个示例函数声明 */#endif//FOO_H_ foo.c #include "foo.h"/* 包含头文件(这里不是必须的)*/int foo(int x)/* 函数定义 */{返回 x + ..
发布时间:2022-01-11 15:57:43 其他开发

C++ #include 守卫

已解决 真正帮助我的是我可以#include .cpp 文件中的标头而不会导致重新定义的错误. 我是 C++ 新手,但我有一些 C# 和 Java 编程经验,所以我可能会遗漏一些 C++ 独有的基本知识. 问题是我真的不知道哪里出了问题,我会贴一些代码来尝试解释问题. 我有三个类,GameEvents、Physics 和 GameObject.我有他们每个人的标题.Game ..
发布时间:2022-01-11 15:54:11 C/C++开发

添加包含保护会破坏构建

我将#ifndef..#define..#endif 添加到我的项目文件中,但编译器失败.一旦我删除它或在定义中放置任何其他名称,它就可以正常编译.可能是什么问题呢? 听起来文件已经声明了,但我不知道在哪里.我可以删除它,但我真的很想知道为什么会这样. 错误:“{"标记之前的预期类名错误:“QDesignerFormEditorInterface"尚未声明 还有一些其他错误. 我 ..
发布时间:2021-12-31 22:22:10 C/C++开发

#pragma 曾经是一个安全的包含守卫吗?

我读到在使用 #pragma once 时有一些编译器优化,这可以导致更快的编译.我承认这是非标准的,因此可能会造成跨平台兼容性问题. 大多数现代编译器在非 Windows 平台 (gcc) 上都支持这种功能吗? 我想避免平台编译问题,但也想避免后备防护的额外工作: #pragma once#ifndef HEADER_H#define HEADER_H...#endif//HEAD ..
发布时间:2021-12-01 15:38:50 C/C++开发

为什么我的包含守卫不阻止递归包含和多个符号定义?

关于包含守卫的两个常见问题: 第一个问题: 为什么不包含保护保护我的头文件免于相互、递归包含?每次我编写类似以下内容时,我都会收到关于不存在的符号的错误,这些错误显然存在甚至更奇怪的语法错误: "a.h" #ifndef A_H#定义A_H#include "b.h"...#endif//A_H "b.h" #ifndef B_H#define B_H#include "a ..
发布时间:2021-12-01 15:29:47 C/C++开发

防止直接访问 php 包含文件

我有一个 php 文件,我将专门用作包含文件.因此,当通过输入 URL 而不是被包含来直接访问它时,我想抛出一个错误而不是执行它. 基本上我需要在php文件中做如下检查: if ( $REQUEST_URL == $URL_OF_CURRENT_PAGE ) die ("不支持直接访问"); 有没有简单的方法可以做到这一点? 解决方案 对于一般性的“PHP 应用程序运行在您可能完 ..
发布时间:2021-12-01 11:02:39 PHP

模板 (.tpp) 文件包含保护

在编写模板化类时,我喜欢将实现移动到不同的文件 (myclass.tpp) 并将其包含在主标题的底部 (myclass.hpp>). 我的问题是:我需要在 .tpp 文件中包含守卫还是将它们包含在 .hpp 文件中就足够了? 示例代码: myclass.hpp #ifndef MYCLASS_HPP#define MYCLASS_HPP模板我的课堂{民众:T foo(T obj ..
发布时间:2021-09-04 20:47:20 C/C++开发

C ++ Header Guard语法和标题位置

我的问题是标题防护的正确语法和用法.例如,如果我在C ++代码中包含一些通用库,那么我可以像下面所示的那样制作标题保护程序吗?另外,从我可以在头文件中找到的文档中,建议将头防护放置在头文件中.我正在使用Microsoft Visual Studio.我可以仅将标题保护程序和#include文件放置在主源文件中吗?还是这是不好的做法?我知道您可以使用#pragma充当标头保护.但是,这不是受支持的标 ..
发布时间:2021-05-13 20:55:02 C/C++开发

如何减少单个.cpp文件的大型C ++库的编译时间?

我们正在开发一个 C ++库,其中目前包含500多个单独的.cpp文件.它们都被编译并存档到静态库中.即使使用并行构建,也要花费几分钟.我想减少编译时间. 每个文件平均有110行,其中有一个或两个函数.但是,对于每个.cpp文件,都有一个对应的.h标头,并且许多.cpp文件中通常都包含这些标头.例如,A.cpp,B.cpp,C.cpp等可能包含A.h. 我首先想配置编译过程.有没有办法 ..

#endif之后的令牌合法吗?

我目前正在执行以下操作,并且编译器(MSVC2008和2010)没有对此抱怨,但是我不确定这是否是个坏主意: #ifndef FOO_H_ #define FOO_H_ // note, FOO_H_ is not a comment: #endif FOO_H_ 我以前总是将其写为#endif // FOO_H_,但今天我发现自己没有这样做,并认为这很奇怪,因为显然我已经有一段时间没 ..
发布时间:2020-06-26 18:47:56 C/C++开发

内外兼备警卫之间的语用差异?

将#pragma once放置在包含防护中而不是外面时是否有区别? 情况1: #ifndef SOME_HEADER_H #define SOME_HEADER_H #pragma once 情况2: #pragma once #ifndef SOME_HEADER_H #define SOME_HEADER_H 出于好奇,我只是想知道是否有某些特殊情况下我应该优先选择一 ..
发布时间:2020-06-26 18:47:54 C/C++开发

Shell脚本中是否有任何类似于"include guard"的机制?在C ++中?

让我们看一个例子:在我的main.sh中,我想获取a.sh和b.sh的源代码.但是,a.sh可能已经来源b.sh.因此,这将导致b.sh中的代码执行两次. C ++中是否有任何类似“包含防护"的机制? 解决方案 如果要采购脚本,通常会使用它们来定义函数和/或变量. 这意味着您可以通过测试脚本定义的功能(或变量之一)来测试脚本是否以前已获得源代码. 例如(在b.sh中): ..
发布时间:2020-06-26 18:47:49 其他开发

用于包括警卫队的名称?

人们在为自己的保镖选择名称时是否倾向于遵循任何准则?我不明白为什么 .h 文件的名称与包含保护中使用的名称略有不同.例如,我看过sphere.h,然后看过#ifndef SPHERE_H_.我可以很容易地使用SPHERE_还是名称必须匹配?下划线也是必需的吗? 解决方案 要为标头后卫选择好名字,请考虑以下几点: 1)名称必须是唯一的,因此请使其长而具体.通常可以通过包括项目名称,模块 ..
发布时间:2020-06-26 18:47:47 C/C++开发