428得票15回答
#pragma once是一种安全的头文件包含防护方式吗?

我读到使用#pragma once会有一些编译器优化,可以加快编译速度。我知道这是非标准的,可能会在跨平台上造成兼容性问题。 大多数现代编译器在非 Windows 平台(如 gcc)是否支持这个优化呢? 我想避免平台编译问题,但也想避免额外的后备保护工作:#pragma once #ifn...

232得票4回答
在C语言中创建自己的头文件

有人可以解释一下如何从头到尾创建一个C头文件的简单示例吗?

184得票33回答
防止直接访问PHP include文件

我有一个 PHP 文件,我将其作为唯一的 include 使用。因此,当直接通过在 URL 中输入文件名来访问该文件时,我希望抛出错误而不是执行它。 基本上,我需要在 PHP 文件中执行以下检查:if ( $REQUEST_URL == $URL_OF_CURRENT_PAGE ) die ...

82得票3回答
为什么我的包含保护没有防止递归包含和多个符号定义?

包含保护的两个常见问题: 第一个问题: 为什么包含保护没有保护我的头文件免受相互递归包含的影响?每次我编写类似以下代码的内容时,都会收到有关不存在的符号(明显存在)或更奇怪的语法错误的错误消息: "a.h"#ifndef A_H #define A_H #include "b.h" ...

60得票9回答
为什么C/C++的"#pragma once"不是ISO标准?

我目前正在处理一个大项目,而维护所有的 include guards(包含保护)让我感到非常疯狂!手动编写太浪费时间了。虽然很多编辑器可以生成include guards,但这并没有帮上太多的忙: 编辑器根据文件名来生成guard symbols(守卫符号)。当您在不同的目录中拥有相同文件...

54得票8回答
为什么不包括保护措施使得循环#include起作用呢?

我有三个类:GameEvents、Physics和GameObject。我为每个类都有头文件。 - GameEvents有一个Physics对象和一个GameObject对象的列表。 - Physics有一个GameObject对象的列表。 请注意循环依赖。我试图实现GameObject能...

53得票2回答
C语言中"ifndef"和"if !defined"有什么区别?

我在同一个C源文件中看到了#ifndef ABC和#if !defined (ABC)。 它们之间是否有微妙的差别?(如果只是风格的问题,为什么有人会在同一文件中同时使用它们)

39得票5回答
你如何实现头文件保护,并且在它们之间可以放置什么内容?

在LearnCpp.com | 1.10 — 预处理器的首次接触中。在头文件保护下,有以下代码片段: add.h: #include "mymath.h" int add(int x, int y); subtract.h: #include "mymath.h" int subtr...

35得票3回答
我应该仍然使用#include guards和#pragma once吗?

http://en.wikipedia.org/wiki/Pragma_once 当所有编译器都支持#pragma once时,我是否仍然需要使用包含保护? 许多Stack Overflow上的回答都建议为了兼容性而同时使用两种方法,但我不确定这是否仍然正确。 现在有哪些编译器不支持#pr...

28得票9回答
include guards的推荐命名规范是什么?

通常情况下,预编译指令的命名方式是怎样的?我经常看到这样的写法: #ifndef FOO_H #define FOO_H // ... #endif 然而,我认为这并不直观。如果没有看到文件名,很难知道FOO_H的用途和它的名称所指代的内容。 什么被认为是最佳实践?