C/C++ 代码的预处理器指令 #ifndef

2024-05-10

在 Eclipse 中,每当我创建一个新的 C++ 类,或者C头文件中,我得到以下类型的结构。假设我创建头文件 example.h,我得到:

/*Comments*/
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
/* Place to put all of my definitions etc. */
#endif

我认为 ifndef 是说,如果未定义 EXAMPLE_H_,请定义它,这可能很有用,具体取决于您使用什么工具来编译和链接项目。不过,我有两个问题:

  1. 这很常见吗?我不常看到它。使用该标题是一个好主意,还是应该直接跳到定义代码。

  2. EXAMPLE_H_ 到底是什么?为什么不是 example.h,或者只是示例?这有什么特别的吗,或者可能只是 Eclipse 更喜欢自动构建项目的一个产物?


这是一个常见的构造。目的是在翻译单元中只包含一次头文件的内容,即使物理头文件被包含多次。例如,如果您将标头直接包含在源文件中,并且也通过另一个标头间接包含该标头,则可能会发生这种情况。

将 #ifndef 包装器放在内容周围意味着编译器仅解析标头的内容一次,并避免重新定义错误。

某些编译器允许“#pragma Once”执行相同的操作,但 #ifndef 构造在任何地方都适用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++ 代码的预处理器指令 #ifndef 的相关文章

随机推荐

  • JUnit 使用 Mockito 测试异步方法

    我已经使用 Spring Framework 版本 5 0 5 RELEASE 在 Java 1 8 类中实现了异步方法 public class ClassToBeTested Autowired private MyComponent
  • Android:从 https url 获取响应

    问候 我正在开发一个 Android 应用程序 需要通过 https 打开一个 url 带有 POST 参数 并获取响应 我有一个自签名证书 这让情况更加复杂 我还需要接受cookies 有人知道从哪里开始吗 提前谢谢了 Android 附
  • 如何从 php 代码更改 php 设置?

    我想更改 php 设置 但从 php 页面而不是 php ini 更改 我要更改的设置是 upload max filesize post max size and memory limit 如果您有AllowOverride 选项 您可以
  • 使用 Intern 测试自定义 JavaScript(不是 Node 模块)

    是否可以为自定义客户端创建和运行测试套件 JavaScript 不是作为 Node 模块创建的 应该如何 那么配置要改吗 Intern 配置中有 loader 部分 指定了 如果我做对了 将会加载的包 是否有必要 以某种方式在这里包含我的自
  • 运行多线程时双重释放或损坏

    我在 C 程序中遇到运行时错误 双重释放或损坏 该程序调用可靠的库 ANN 并使用 OpenMP 并行化 for 循环 glibc detected home tim test debug test double free or corru
  • Diesel:添加子查询的结果

    给出下表 accounts id INTEGER opening balance INTEGER transactions debit INTEGER credit INTEGER amount INTEGER foreign key de
  • Typescript 编译错误:类型“typeof e”上不存在属性“bodyParser”

    我想在我的节点 express 环境中使用打字稿 托管在 Cloud 9 ide 中 我在尝试让编译器编译 app ts 时遇到问题 它出现了几个错误 其中属性 bodyParser 在类型 typeof e 上不存在就是其中之一 我在应用
  • Erlang get_tcp:recv数据长度

    I user gen tcp recv Socket 0 用于数据接收 但我只能接收1次1418字节 我怎样才能收到发送的数据量 in gen tcp recv Socket 0 您正在询问内核 给我接收缓冲区中现在可用的所有数据 不过 内
  • 使用 GDBus 通过 D-Bus 发送字节数组(类型 `ay`)

    我正在尝试使用 DBus 绑定通过 D Bus 获取字节数组 你能告诉我如何实现这一目标吗 我尝试谷歌搜索但没有帮助 字节数组包含图像文件 因此无法转换为 charbytearray 任何帮助表示赞赏 我使用 XML 做了一些测试 其中使用
  • 平滑地将渐变应用于 UIImage

    我正在尝试使用 CoreGraphic 将渐变应用于 UIImage 然而 我得到的结果不是很好 我想在图像底部创建一个黑色到透明的渐变 以便为我放置一些文本创建对比度 然而 我能够实现的渐变与图像不能很好地融合 你可以清楚地看到中心的分离
  • Google Cloud Speech API 使用的端点/端口是什么

    通过流 API 使用 Google Cloud Speech API 对音频流执行流式语音识别 https cloud google com speech to text docs streaming recognize performin
  • Nest Elastic - 构建动态嵌套查询

    我必须使用 Nest 查询嵌套对象 但是查询是以动态方式构建的 下面的代码演示了以静态方式对嵌套 书籍 进行查询 QueryContainer qry qry new QueryStringQuery DefaultField name D
  • 通过 id 查找 视图?

    如果视图是 id 是否可以通过 id 查找视图
  • 使用cgo时的多重定义

    package main int add int a int b return a b import C import fmt func main func Test1 fmt Println C add 1 3 export Test2
  • 数组a和&a的起始地址

    在下面两行中 char a 5 1 2 3 4 5 char ptr char a 1 printf d ptr 1 这会在屏幕上打印 5 而当使用 a 代替 a 时 char a 5 1 2 3 4 5 char ptr char a 1
  • 根据随机选择的列生成随机天数

    我有一个如下所示的数据框 感谢 SO 社区在以下方面提供的帮助 df1 pd DataFrame person id 11 11 12 13 14 date birth 01 01 1961 12 30 1961 05 29 1967 01
  • 当前位置在 Google 地图中不起作用

    我在 swift 3 中集成了谷歌地图 当地图屏幕出现而不显示当前位置时 我在 plist 文件中添加了两个键 并设置了 CLLocationManager delegate 和 requestAlwaysAuthorization cla
  • 判断线程是否已经启动

    如何判断Python线程是否已经启动 有一个方法is alive 但这是真的before and while一个线程正在运行 你可以看看ident领域的Thread实例 这Python 2 7 线程文档 http docs python o
  • 独立的开发和生产 Firebase 环境

    我正在考虑使用 Firebase 作为 MBaaS 但是我找不到任何可靠的解决方案来解决以下问题 我想设置两个单独的 Firebase 环境 一个用于开发 一个用于生产 但我不想在开发和生产之间手动复制功能 例如远程配置设置 通知规则等 环
  • C/C++ 代码的预处理器指令 #ifndef

    在 Eclipse 中 每当我创建一个新的 C 类 或者C头文件中 我得到以下类型的结构 假设我创建头文件 example h 我得到 Comments ifndef EXAMPLE H define EXAMPLE H Place to