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

C语言 ——— 条件编译指令实际用途

目录

前言

头文件被包含的方式

嵌套文件包含

使用条件编译指令规避头文件多次包含

 还有一个编译指令,同样能做到以上功能


 

前言

条件编译指令多用于对头文件的定义和判断以及删除


头文件被包含的方式

本地文件包含(也就是自己创建的头文件):

#include "stdio.h"

本地文件包含的查找策略:
会现在源文件所在的目录下查找,如果该头文件没有查找到,编译器就会像查找库函数的头文件一样在标准位置查找该头文件,如果再找不到就会提示编译错误

库文件包含:

#include<stdio.h>

库文件包含的查找策略:

查找库里面的头文件时,编译器会直接去标准路径下查找,如果找不到就会提示编译错误

结论:

库里面的头文件也可以使用 "" 的形式包含,但这样的话查找头文件的效率就低了,且这样也不容易区分是库文件还是本地文件了,所以本地文件使用 "" 的形式包含,库文件使用 <> 的形式包含


嵌套文件包含

在一个工程项目里面,可能 .h 文件包含了其他 .h 文件,也有可能互相包含,这样的结果就会导致同一份 .h 文件出现多次,这样就造成了文件内容的重复

解决以上文件就需要使用到条件编译指令,来判断和删除头文件


使用条件编译指令规避头文件多次包含

代码演示:

#ifndef __TEST_H_
#define __TEST_H_

int Add(int x, int y);

#endif

以上代码的头文件为:#include "test.h"

代码解析:
#ifndef 编译指令的功能是:当后面的表达式为假的时候(也就是没有定义时)就执行中间的代码,否则就不执行,且头文件为 test.h ,那么要使用 #ifndef 来判断的话,最好是将 test.h 写成 __TEST_H_ 的形式,便于理解

当其他头文件包含此 test.h 头文件时,也就是当程序第一次进入此头文件的时候,程序肯定没有包含过此头文件,所以 #ifndef 判断就会为假,#ifndef 中的代码就会执行,且 #define 就会定 义 __TEST_H_ 这个头文件

所以当第二次以后其他头文件包含此文件时,#ifndef 判断就会为真,#ifndef 中的代码就不会再执行

这样就规避了同一份 .h 文件出现多次,且文件内容重复的情况


 还有一个编译指令,同样能做到以上功能

代码演示:

#pragma once

只要将这条指令放在头文件的最开始位置,也同样能实现以上功能


http://www.kler.cn/a/300429.html

相关文章:

  • Scade 表达式 - 迭代器
  • 通信协议—WebSocket
  • 移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场
  • 【18】Word:明华中学-儿童医保❗
  • 25/1/15 嵌入式笔记 初学STM32F108
  • 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
  • SQL数据分析形成笛卡尔积数据重复计算问题
  • 金融壹账通:智能面审解决方案“大显身手”
  • 故障恢复(残次版)
  • 层归一化(201607)
  • Centos7.9下的snmp搭建及实例
  • Day7 | Java框架 | SpringMVC
  • 用Python-pptx定制你的形状效果
  • 泰语快速学习方法!速成方法学习!
  • Java:继承和多态(1)
  • 在 Ubuntu 下通过 Docker 部署 Misskey 服务器
  • 视频推拉流/直播点播EasyDSS平台安装失败并报错“install mediaserver error”是什么原因?
  • C#使用TCP-S7协议读写西门子PLC(二)
  • C#中的类
  • 力扣sql五十题——连接
  • 银河麒麟国产化系统(或者是Linux)一键安装docker和docker-compose
  • C++ 封装 DLL 供 Unity 调用
  • 开源Devops工具-Ansible
  • 浅谈C#之任务调度TaskScheduler
  • Java | Leetcode Java题解之第398题随机数索引
  • 每日OJ_牛客_合唱团(打家劫舍dp)