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

关于头文件为什么要加条件编译语句

因为有些情况重复包含头文件会出现重复定义或者导致多次包含导致增加编译时间。

下述是没有假如条件编译和宏定义的例子:

// common_functions.h
int addTwoNumbers(int a, int b);
// data_structures.h
#include "common_functions.h"struct MyStruct {int data;
};
// main_logic.h
#include "common_functions.h"
#include "data_structures.h"void processData();
#include "main_logic.h"int main() {int result = addTwoNumbers(3, 4);return 0;
}

上述代码从main.c开始,要包含addTwoNumbers的声明,因此要包含common_function.h的头文件,但是为了保证后续开发,一般main可能会包含多个函数声明,因此在这里先包含了main_logic.h头文件,然后main_logic.h又包含了两个头文件,其中common_function.h是我们需要的,到这里其实就完成了。

但是data_structures.h还能继续,展开发现里面还包含了common_function.h,这就是反复包含,如果在头文件中进行了定义,则会出现重复定义的错误,如果是这种情况,则会导致增加编译时长。

下述是包含了条件编译和宏定义的例子:

// common_functions.h
#ifndef COMMON_FUNCTIONS_H
#define COMMON_FUNCTIONS_Hint addTwoNumbers(int a, int b);#endif
// data_structures.h
#ifndef DATA_STRUCTURES_H
#define DATA_STRUCTURES_H#include "common_functions.h"struct MyStruct {int data;
};#endif
// main_logic.h
#ifndef MAIN_LOGIC_H
#define MAIN_LOGIC_H#include "common_functions.h"
#include "data_structures.h"void processData();#endif

内容和上述例子差不多,只是多加了条件编译和宏定义,在没有定义的时候进行定义。

我们按照上述的流程,在main_logic.h包含了两个头文件,其中common_function.h是我们需要的,我们进入common_function.h的时候发现没有定义COMMON_FUNCTIONS_H,于是进行了定义。

之后从data_structures.h进入common_function.h的时候,我们已经定义过COMMON_FUNCTIONS_H了,则不会再进入头文件进行处理。

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

相关文章:

  • strstr
  • C语言 | Leetcode C语言题解之第454题四数相加II
  • Leetcode 删除链表倒数第 N 个节点
  • [移植] tgi 编译
  • vue-element-admin后台集成方案
  • 40条经典ChatGPT论文指令,圈定选题和进行论文构思
  • 在不支持WSL2的Windows环境下安装Redis并添加环境变量的方法
  • 《Electron 基础知识》代码打开开发者工具DevTools
  • 小米R3G刷机OP
  • 移动机器人规划控制合集
  • Type-C接口桌面显示器的优势
  • 机器学习中的熵(Entropy)是什么?
  • JAVA基础:Lock不同的锁形式
  • 【LeetCode每日一题】——679.24 点游戏
  • 【Conda】Conda命令详解:高效更新与环境管理指南
  • 机器学习:回归模型和分类模型的评估方法介绍
  • 担心学术窃取?阿里云加密的AI论文工具帮你锁紧数据!
  • leetcode经典算法题总结
  • 运维工具之ansible
  • 基于 CSS Grid 的简易拖拉拽 Vue3 组件,从代码到NPM发布(1)- 拖拉拽交互
  • 【华为HCIP实战课程六】OSPF邻居关系排错网络子网掩码问题,网络工程师
  • 基础教程 | 用VuePress搭建一个简单的个人博客(附源码)
  • Ubuntu20.04,编译安装BCC
  • # 显卡算力参数对比
  • 掌握RocketMQ4.X消息中间件(一)-RocketMQ基本概念与系统架构
  • 实际开发中,java开发的准备工作
  • SQL进阶技巧:Order by 中 NULLS LAST特性使用?
  • Redis:cpp.redis++类型操作
  • 感冒用药记录
  • JMeter性能测试时,如何做CSV参数化