文档章节

为什么在C ++头文件中使用#ifndef和#define?

j
 javail
发布于 01/26 21:03
字数 409
阅读 67
收藏 0

3 月,跳不动了?>>>

我一直在头文件的开头看到这样的代码:

#ifndef HEADERFILE_H
#define HEADERFILE_H

并在文件的最后是

#endif

这样做的目的是什么?


#1楼

这些被称为#include警卫

包含标头后,它会检查是否定义了唯一值(在本例中为HEADERFILE_H )。 然后,如果未定义,则定义它并继续到页面的其余部分。

当再次包含代码时,第一个ifndef失败,导致空白文件。

这可以防止双重声明任何标识符,例如类型,枚举和静态变量。


#2楼

#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif

#ifndef检查给定标记在文件或包含文件中是否已经#defined ; 如果没有,它包括它与结束#else之间的代码,或者,如果没有#else ,则包括#endif语句。 #ifndef通常用于通过在包含文件后定义令牌并检查令牌未设置在该文件的顶部来使头文件具有幂等性。

#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif

#3楼

这可以防止多次包含相同的头文件。

#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif

假设您已将此头文件包含在多个文件中。 因此,第一次没有定义__COMMON_H__时,它将被定义并包含头文件。

下次定义__COMMON_H__时,它将不再包含。

本文转载自:https://th.sofbug.com/question/6wGk

j
粉丝 7
博文 1512
码字总数 0
作品 0
深圳
私信 提问
头文件中的ifndef/define/endif是干什么用的?

例如:要编写头文件test.h 在头文件开头写上两行: #ifndef TESTH #define TESTH//一般是文件名的大写 ············ ············ 头文件结尾写上一行: #endif 大概...

LoSingSang
2018/02/28
172
0
C++中extern “C”含义深层探索

1.引言   C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式...

sharep
2013/07/23
0
0
stm32f429之#ifndef的用法

作用:防止头文件的重复包含和编译 定义   #ifndef x   #define x   ...   #endif   这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上...

昆仑山道长
昨天
0
0
# ifdef #ifndef 等用法(转)

头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 ...

rainbowcode
2019/09/16
62
0
转--C++中extern “C”含义深层探索

1.引言   C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式...

狂斩一条龙
2011/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存

一、malloc/free概述 malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数。free是进行内存释放的库函数。 1、函数原型 #include <stdlib.h> void *malloc( size_t size ); v...

shzwork
44分钟前
17
0
什么是JavaBean? - What is a JavaBean exactly?

问题: I understood, I think, that a "Bean" is a Java class with properties and getters/setters. 我认为,“ Bean”是具有属性和getter / setter的Java类。 As much as I understand,......

技术盛宴
51分钟前
21
0
深圳援鄂最后一批工作人员归来,88万元关爱金发放至85人

中国公益在线3月31日深圳讯 深圳援鄂最后一批工作人员归来......深圳市民政局、深圳市卫健委和深圳市慈善会发起了“深爱战疫天使基金”项目,联合龙华区慈善会和 永贤慈善基金会,进行第二次...

传承天下融媒体中心
55分钟前
15
0
easyui 的combobox设置宽度和高度自动适应,如果超出,则指定宽度和高度

<s:select list="newCostTypeMap" theme="simple" cssClass="myCombobox" cssStyle="width:200px" data-options="editable:false,panelHeight:'auto'" />$('.myCombobox').combobox({......

文文1
56分钟前
17
0
Scala的运算符

在Scala中运算符的表示法不局限于字符, 中缀运算符可以是任何方法接受参数的方法 前缀运算符放在值的前面,只能是 + - ! ~ 四者之一, 方法名为unary_*(*为运算符) 后缀运算符是任何不接受参...

dreamness
今天
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部