|
|
1
14
这是一个常见的构造。其目的是仅在翻译单元中包含头文件的内容一次,即使物理头文件包含多次。例如,如果直接在源文件中包含头文件,并且还通过另一个头文件间接包含头文件,则可能发生这种情况。 将ifndef包装放在内容周围意味着编译器只解析一次头的内容,并避免重新定义错误。 有些编译器允许“pragma once”执行相同的操作,但是“ifndef”构造在任何地方都有效。 |
|
|
2
4
这只是保护include的一种常见方法-这样可以防止代码被包含两次。所使用的标识符可以是任何东西,按照描述的方式来做只是惯例。 |
|
|
3
4
常见吗?是的- 全部的 C和C++头文件应该是这样构造的。示例_h是头保护,它防止头中的代码在同一翻译单元中包含多次,这将导致多个定义错误。名称exapmle_h被选择来匹配它正在保护的头文件的名称-它需要在您的项目中是唯一的,也可能是全局的。为了确保这一点,在项目名称前加前缀或后缀是正常的:
例如,如果您的项目被称为“myproj”。别以为用下划线前缀会神奇地使它独一无二,顺便说一句,名字就像
|
|
|
4
2
始终在头文件的顶部执行此操作。它通常被称为头罩或包括罩。 它所做的是使其成为这样,如果一个头文件将包括多次,它将只包括一次。如果你不这样做,那么你最终会在被定义多次的事情和类似的事情上出错。 确切的定义没有那么重要,但通常是文件名的一些变化。基本上,您要检查给定的宏是否已经定义。如果没有,则定义它,并继续包含该文件。如果有,那么您必须以前包含该文件,并且忽略该文件的其余部分。 |
|
5
2
这是一个包含警卫。它保证一个报头最多包含一次。 例如,如果您要:
第一次包含标题时,
第二次包含标题时,
这对于确保您不违反一个定义规则非常重要。如果在没有包含保护的头中定义一个类,并将该头包含两次,则会由于违反了一个定义规则而导致编译错误(类将被定义两次)。
虽然上面的例子很简单,您可以很容易地看到您包括
|
|
6
2
考虑这个 文件Fo.C:
文件栏
现在,当我们编译foo.c时,有两次foo.h!我们当然不想这样做,因为所有的函数都会在第二次出现编译错误。
为了防止这种情况,我们把
这是很常见的(通常是强制的),如果有人不把一个放在那里,这是非常令人沮丧的。你
|
|
|
7
1
u人的意思是我必须为我要包含的每个头文件设置头保护。 我,E。我有以下头文件包括abc.h和def.h,而我必须放置头保护,如下所示 γ干扰素 #定义ABC和 γ干扰素 定义定义 |
|
|
8
0
这被称为“包含保护”,实际上是C/C++头文件常见的习惯用法。这允许头文件被包括多次,而不包括其内容的乘法。 名称示例_h_uuu是一种任意约定,但必须遵守C预处理器宏的命名规则,其中不包括例如example.h这样的名称。由于C宏都是在单个全局命名空间中定义的,因此不要有使用相同名称作为其include guard的不同头文件,这一点很重要。因此,最好将项目或库的名称包含在include guard名称中:
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |