#ifndef, #define, #endif的作用

目录

  • 作用
  • 示例

在这里插入图片描述

作用

#ifndef

它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义、文件包含、条件编译)中的一种——条件编译。

在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,多个c文件包含同一个h文件也不会报错。

但是在c语言中,#ifndef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifndef宏定义,多个c文件包含同一个h文件还是会出现全局变量重定义的错误。

使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。

示例

#ifndef x                //先测试x是否被宏定义过
#define x程序段1balabala~      //如果x没有被宏定义过,定义x,并编译程序段 1
#endif   程序段2balabala~    //如果x已经定义过了,则编译程序段2的语句,“忽视”程序段 1

条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译

条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成的目标程序程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能的MySQL(2)慢查询

一、剖析MySQL查询1、首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具。a、开始mysql的慢查询,修改my.conf[mysqld] #开启慢查询 log_slow_queries ON #指定日志文件存放位置,可以为空,系统会给一个…

python爬虫获取小说根据正文调用函数传入章节地址列表_python爬虫之小说章节获取,聊斋志异小说完整版...

“写鬼写妖高人一等,刺贪刺虐入骨三分。”没找到聊斋志异完整版的txt文档,那就把在线阅读的文章抓下来吧。开发环境python3.7requests模块lxml模块获取分析找到聊斋志异的小说网站。通过查看源码与分析小说每一章的URL链接发现,构成每一章的U…

程序运行时对应的内存分布(BSS段、数据段、代码段、堆、栈)关系

参考:程序运行时对应的内存分布关系 作者:嵌入式基地(公众号) 发布时间: 2021-04-28 网址:https://mp.weixin.qq.com/s/AVDPZawSjg9HtxEm8vsFBA 参考:静态变量与动态变量的定义与区别 作者&…

java线程池 锁_java多线程——锁

这是多线程系列第四篇,其他请关注以下:如果你看过前面几篇关于线程的文字,会对线程的实现原理了然于胸,有了理论的支持会对实践有更好的指导,那么本篇会偏重于线程的实践,对线程的几种应用做个简要的介绍。…

Ubuntu时间显示不准确的解决方案

参考:解决ubuntu里面时间不正确的办法 作者:三速何时sub20 发布时间:2020-12-08 16:24:27 网址:https://blog.csdn.net/weixin_44234294/article/details/110875899?spm1001.2014.3001.5501 目录1、进入终端2、输入命令3、选择 A…

Ubuntu下软件的安装、卸载方法

参考:Ubuntu 如何使用命令卸载安装过的软件(超级简单) 作者:一只青木呀 发布时间:2020-08-04 09:19:01 网址:https://blog.csdn.net/weixin_45309916/article/details/107778981 参考:Ubuntu下软…

Ubuntu文件压缩、解压缩、打包解包(带软链接)、拷贝文件(带软链接)、拷贝文件夹

参考:Ubuntu 命令解压文件大全 作者:一只青木呀 发布时间: 2020-08-04 17:18:55 网址:https://blog.csdn.net/weixin_45309916/article/details/107791294 参考:打包和压缩的概念和区别 作者:不浪漫的罪名L…

Ubuntu开启FTP服务方法(Ubuntu和Windows之间互传文件需要开启——服务器端)

目录Ubuntu开启FTP服务步骤:Ubuntu开启FTP服务步骤: 工作中Ubuntu和Windows之间互传文件,需要服务器端(Ubuntu)开启FTP服务,客户端(Windows)安装FileZilla。平时自己学习电脑安装虚拟…

win7共享wifi

为什么80%的码农都做不了架构师?>>> 1.从开始菜单找到“命令提示符”,或直接键入cmd快速搜索,右键单击它,选择“以管理员身份运行” 2.运行以下命令启用虚拟无线网卡: netsh wlan set hostednetwork mod…

Ubuntu开启NFS、SSH服务(驱动开发用到、电脑端登录ARM板用到)

参考:Ubuntu下NFS服务的开启 作者:一只青木呀 发布时间:2020-08-04 14:06:58 网址:https://blog.csdn.net/weixin_45309916/article/details/107784877 目录NFS服务的开启1.安装NFS服务2.创建 linux 工作目录3.配置NFSUbuntu下SSH…

【整理】MySQL 之 autocommit

2019独角兽企业重金招聘Python工程师标准>>> mysql 默认是开启 auto commit 的。可以通过如下命令查看 session 级别和 global 级别的设置: mysql> select session.autocommit; ---------------------- | session.autocommit | ---------------------…

交叉编译链的安装

参考:嵌入式 交叉编译链的安装 作者:一只青木呀 发布时间:2020-08-04 18:13:13 网址:https://blog.csdn.net/weixin_45309916/article/details/107789879 目录什么是交叉编译器交叉编译器的下载交叉编译器的安装1.把下载的文件放到…

Ubuntu下安装VS Code以及C/C++插件(PS工作目录的创建)

参考:Visual Studio Code Ubuntu下安装 以及C/C插件大全 作者:一只青木呀 发布时间:2020-08-05 11:55:53 网址:https://blog.csdn.net/weixin_45309916/article/details/107811506 目录为何选择安装VS CodeVisual Studio Code 安装…

Common Lisp中调用R

2019独角兽企业重金招聘Python工程师标准>>> R是功能强大的统计软件,和Lisp一样也有一个交互式的命令行环境,还有众多的扩展库,可以用来进行专业的统计分析。要在Common Lisp中方便的调用R的功能,可以试用rcl这个库。安…

java生成pdf加密_java使用iText 生成PDF全攻略(表格,加密)

java使用iText 生成PDF全攻略,包括创建文档,设置字体,添加表格(PdfPTable),创建新页(newPage),设置布局,加密主要使用的jar包: itextpdf-5.4.2.jar,itext-pdfa-5.4.2.jar,itext-xtra-5.4.2.jar,如果用到中文,需要CJK字体的扩展包:itext-asian.jar如果用到…

恩智浦NXP I.MX6ULL芯片介绍下载官网资料

参考:NXP I.MX6ULL芯片介绍以及资料的获取 作者:一只青木呀 发布时间:2020-09-26 10:54:26 网址:https://blog.csdn.net/weixin_45309916/article/details/108808573 目录I.MX6ULL芯片介绍以及官网资料的获取I.MX6ULL芯片介绍以及…

判定点是否在不规则多边形内部的问题

2019独角兽企业重金招聘Python工程师标准>>> 问题如下: 话说在平面内有一个任意的不规则的封闭多边形,另外在这个平面内还有一个点,问题:如何高效的判定这个点是在这个多边形内部还是外部?补充&#xff1a…

Cortex-A7 MPCore 架构详细介绍(九种运行模式、内核寄存器组R0~R15,有特定的名字和功能)

目录0.ARM架构的历史简介1.Cortex-A7 MPCore(即多核) 简介2.Cortex-A 处理器九种运行模式3.Cortex-A 寄存器组(内核寄存器)3.1通用寄存器3.1.1未备份寄存器(R0~R7)3.1.2备份寄存器(R8~R12、SP指针R13、备份R14也叫LR)3.1.3程序计数器R15(PC)3.2程序状态寄…

Java开发中遇到具有挑战的事_Java并发编程的挑战:遇到的问题及如何解决

并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问…

树莓派(TCP客户端 )和Wemos(TCP服务端连接红外模块)通讯实现对红外设备的控制

参考:U如何用树莓派连接语音模块,红外模块来控制红外设备详解 作者:一只青木呀 发布时间:2020-08-12 17:14:10 网址:https://blog.csdn.net/weixin_45309916/article/details/107960066 目录硬件软件红外解码步骤1.连接…