当前位置: 首页 > news >正文

c++头文件中 #ifndef的作用

避免文件重复处理、变量等重定义

//c1.hpp
#ifndef C1_HPP
#define C1_HPP
int a = 0;
#endif // LFU_CACHE_HPP
#include"c1.hpp"
#ifndef C2_HPP
#define C2_HPP
int b=1;
#endif
#include"c1.hpp"
#include"c2.hpp"
#include<iostream>
int main()
{std::cout<<"this";
}

如果上述三个文件,c1.hpp不写预处理指令,编译会出现redefinition variable a 的错误。就是因为c1.hpp被重复包含了。

当编译器第一次处理这个头文件时,#ifndef SOME_HEADER_FILE_H检查SOME_HEADER_FILE_H这个标识符是否未被定义。由于是第一次处理,这个标识符还未被定义,所以条件为真,编译器会继续处理#define SOME_HEADER_FILE_H这一行,定义了这个标识符。
然后编译器会处理头文件中的实际内容,如类定义、函数声明等。当同一个头文件在其他地方再次被包含时,#ifndef SOME_HEADER_FILE_H检查发现SOME_HEADER_FILE_H这个标识符已经被定义了,所以条件为假,编译器会直接跳过#define和头文件内容部分,直到#endif,这样就避免了头文件内容的重复处理。

http://www.lryc.cn/news/486236.html

相关文章:

  • Xcode 项目内 OC 混编 Python,调用 Python 函数,并获取返回值(基于 python 的 c函数库)
  • 每日计划-1117
  • 如何用GPT-4o解读视频
  • [ACTF2020]Upload 1--详细解析
  • 【微软:多模态基础模型】(3)视觉生成
  • 整合Druid
  • 基于Python空气质量可视化及预测
  • 第1章-PostgreSQL(PG)介绍
  • moduo之阻塞队列BlockingQueue和BoundedBlockingQueue
  • 大模型Tuning方法详解
  • 爬虫策略与反爬机制——爬虫常见策略
  • Linux基础(十七)——Linux 帐号管理与 ACL 权限设置
  • 【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)
  • 11.16 Vue element
  • Gin 框架中的路由
  • 在MATLAB中实现自适应滤波算法
  • linux文件与重定向
  • 基于Python的仓库管理系统设计与实现
  • 【Pikachu】URL重定向实战
  • C语言实现3D动态爱心图形的绘制与动画效果
  • 深入理解Nginx:从基础配置到高级优化
  • ONLYOFFICE8.2版本测评,团队协作的办公软件
  • spring 和 grpc 的整合
  • 企业项目级IDEA设置类注释、方法注释模板(仅增加@author和@date)
  • 1 设计模式原则之开闭原则
  • 前端大环境
  • Electron: 主进程和渲染进程之间通信
  • 社交电商的优势及其与 AI 智能名片小程序、S2B2C 商城系统的融合发展
  • 蓝桥杯c++算法学习【4】之简单数论(阶乘约数、求值、循环小数、等差数列、最大比例:::非常典型的必刷例题!!!)
  • 重构代码之删除对参数的赋值