C语言中:#ifndef 的用法及延伸-20210617

article/2025/9/6 8:01:22

最近由于项目原因需要用到C语言,记录一下看代码时遇到的问题以及知识盲区。

语法结构:

#ifndef _XXX_H_
#define _XXX_H_
...
...
...
#endif

 作用:

防止头文件的重复包含和编译

 C语言编译系统包括预处理,编译和链接等部分。C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。

#ifndef 预处理命令(宏定义、文件包含、条件编译)中的“条件编译”。

  #ifndef x      //先测试x是否被宏定义过

  #define x     //如果没有宏定义下面就宏定义x并编译下面的语句

  ...

  #endif          //如果已经定义了则编译#endif后面的语句

条件指示符#ifndef检查预编译常量在前面是否已经被宏定义。如果在前面没有被宏定义,则条件指示符的值为真,于是从#ifndef到#endif之间的所有语句都被包含进来进行编译处理。

相反,如果#ifndef指示符的值为假,则说明他在前面已经被宏定义过,它与#endif指示符之间的行将被忽略。条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。

理解:

如果一个项目里有两个.c文件(A/B)同时include了同一个头文件(H),而编译时,这两个.c文件要一同编译成一个可运行文件,在文件A中include了头文件H,在文件B中再次include头文件的话,会产生声明冲突。而将头文件内容放到#ifndef  #endif  中,会在include之前判断该头文件是否已经被include过,避免重复引用。

参考链接


http://chatgpt.dhexx.cn/article/6Q7hXSbk.shtml

相关文章

【C/C++】ifndef/define/endif的作用

参考资料来源于网上,还未经本人实验证明。 1 作用 防止头文件被重复包含和编译。 头文件重复包含会增大程序大小,重复编译增加编译时间。 解释:#ifndef起到的效果是防止一个源文件多次包含同一个头文件。那么一个源文件为什么会两次包含同一…

【#ifndef, #define, 和 #endif】

前言 学习AFNetWoring源码的时候,在AFN的h借接口文件又看到了这几个宏定义,学习记录一下。 作用 #ifndef, #define, 和 #endif是C/CPP的预处理指令,常常用来条件编译和防止头文件重复包含。 简介 #ifndef 它是if not define的简写&…

ifndef详解

ifndef详解 #ifndef 是"if not defined"的简写,是预处理功能(宏定义、文件包含、条件编译)当中的条件编译,在实际开发中可以用于做test或者不同版本的不同适配。 在vscode中可以通过json脚本的define来定义ifndef 的值…

禁用swap分区

禁用swap分区 1.进入系统右击鼠标点击“在终端中打开” 2.输入命令 sudo vim /etc/fstab 编辑fstab文件 3.键盘输入 i 进入插入模式就可以对文件进行编辑了 4.将UUIDxxx… swap那一行的最前面添加 # 把这行注释 5.编辑好后按键盘 Esc 退出插入模式 6.键盘输入 :wq 来保存退…

Centos7 关闭swap分区

安装K8S需要关闭swap分区 注释/etc/fstab关于swap的配置 Esc键 :wq 退出。 reboot重启生效 开机后free -m校验

swap分区管理方法

swap分区管理方法 一、内存的认识二、SWAP分区作用(内存暂存的地址-硬盘)三、swap分区大小建议四、swap管理4.1创建swap分区4.2swap临时调整优先级4.2swap永久调整优先级 五、删除swap分区 一、内存的认识 内存很贵 内存与硬盘的差距 /dev/shm 就是内存…

如何修改swap分区大小

测试环境: 依赖组件版本cdh版本5.13操作系统版本centos 6.9 问题现象: 因为是在虚拟机中搭建cdh大数据平台,虚拟机内存大小为4G,性能不足,导致cloudera-manager 服务频繁挂掉。 解决思路: 通过增加交换…

SWAP分区的讲解与命令使用

swap分区(交换分区) :交替存换,映射关系,映射结束后,内核剪断映射,当下次再需要进入映射的时候,在重新指向新的映射。 虚拟内存 :物理内存无法满足需要,衍生…

linux swap交换分区

一、当我们用free -h命令,查看服务器内存情况时,可以看到mem和swap两行。 mem行是从系统角度看来内存使用的情况,total是系统可用的内存大小,数量上等于系统物理内存减去内核保留的内存。 buffers和cached是系统用做缓冲的内存。…

Centos7设置swap分区

前言 Swap分区,即交换区,系统在物理内存(运行内存)不够时,与Swap进行交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈…

linux系统中swap分区的介绍以及处理swap分区被占满的情况

linux分区一般来说是较为灵活的,一般还会单独分出一个交换分区(也就是swap分区),这个分区是用于在物理内存不够用的情况下来帮助承担存储程序所需内存的任务,现在很多的电脑或者服务器的内存都是较大的,所以一般swap分区都不会派上…

swap分区扩展的三种方法

1. 交换分区扩容方法? 1.1 三种方法 (1)扩展正在使用的swap分区的逻辑卷(推荐) (2)新建swap分区 (3)新建swap file 1.2 示例 准备工作: (1…

Linux之使用SWAP分区

通常我们能够在各大服务器商的网站上能够看到服务器的租赁价格主要与带宽、CPU以及内存这三个参数关联度较高,因此初用Linux服务器的朋友们可能开始买的配置都不会很高。但如果你在服务器上部署了较多的服务导致内存不够该怎么办呢?这个时候SWAP该上场了…

linux swap 内存交换分区 详细介绍

目录 1、什么是SWAP,到底是干嘛的? 为什么要进行内存回收? 会回收的两种内存 2、swappiness到底是用来调节什么的? 那么这个swappiness到底起到了什么作用呢? 3、kswapd什么时候会进行swap操作? 4、…

swap分区详解(创建swap分区,启用swap交换空间,关闭swap交换空间)

文章目录 swap分区什么是swap分区swap分区使用情况查看工具free案例 swapon 创建swap分区过程 swap分区 什么是swap分区 swap分区是指在Linux操作系统中为了提高系统运行效率而设置的一块特殊的硬盘空间,也称为虚拟内存。当系统内存不足时,会将一部分不…

Linux基础-Swap分区

博客主页:Passerby_Wang的博客_CSDN博客-系统运维,云计算,Git学习笔记领域博主 🌐所属专栏:『Linux基础』 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! 关注、点赞、收藏、评论。 目录…

保姆级swap分区详解!手把手带你创建swap分区(两种方式,建议收藏)涉及fdisk、gdisk、df、parted、partprobe、mkswap、swapon、free、dd、od等命令

Swap分区的详解 && 创建 什么是swap分区?方法一:使用物理分区创建Swap分区1. 利用fdisk / gdisk在磁盘上划出一个分区1.1 lsblk —— 查看本机的磁盘分区基本情况1.2 df 命令 —— 查看磁盘空间利用率1.3 parted命令 —— 列出磁盘的分区表类型与…

JAVA 类和对象的实例

JAVA 类和对象的实例 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象程序设计中,人们把一类事物的静态属性和动态可以执行的操作组合在一起就得到类这个概念。 2. 类是个抽象的概念,用来模拟一类事物&…

c++类和对象(类的概念)

1.类和对象概念 类:用来对实体(对象)进行描述,对象有什么属性,以及对象具有什么功能是一种自定义类型 对象:现实生活中所存在的 ,对象是对类的具体体现 用类类型创建出来的变量称为对象 2.类…

C++ 类和对象

类和对象 目录 类和对象 面向过程和面向对象的区别 类和对象 定义类的格式 定义类的方式 ​ 类的作用域 面向对象特性 封装 C程序设计中是如何体现封装性的 访问限定符 类的实例化 类的大小 this指针 this指针的特性 汇编角度来看this 函数参数调用约定 t…