文章目录

  • 1 含义
  • 2 用法
  • 3 作用

1 含义

#ifndef是“if not defined”的简写,是宏定义的一种,它可根据是否已经定义好了一个变量来进行分支选择。

2 用法

#ifndef X //先测试x是否被宏定义过,如果被定义则返回假,如果没有被定义则返回真。
#define X  // 如果X没有被宏定义过,定义为X,并执行该语句
#endif   //终止if

该代码段的含义是:如果标识X没有被定义,则重新定义标识X,执行#define的语句,如果标识X已经被定义,则直接执行#endif下面的语句,跳过这种的内容。

#ifndef 和#endif必须一起使用,若丢失#endif,程序可能会报错。

3 作用

#ifndef起到的作用是防止一个源文件两次包含一个头文件。假如你有一个c源文件,它包含了多个头文件:头文件A和头文件B,而头文件B又包含了头文件A,则最终的效果是,该源文件包含了两次头文件A。若在头文件A中定义了结构体或者类类型,编译时会报大量的重复定义错误。所以要用到# ifndef 与#endif,当第一次包含该头文件时,由于没有定义,条件为真,这样就会包含# ifndef 与#endif之间的代码,,当第二次包含头文件,前面已经定义好了,条件为假,# ifndef 与#endif之间的代码也不会再次包含,这样就避免重复定义了。
总结来说:
条件指示符#ifndef的最主要目的是防止头文件的重复包含和编译。条件编译当然也可以用条件语句来实现, 但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。

c++中的# ifndef 与#endif相关推荐

  1. C++中#ifndef/#define/#endif使用详解

    想必很多人都看过"头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?是不能在不同的两个 ...

  2. ifndef/define/endif——主要目的是防止头文件的重复包含和编译

    原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...

  3. #ifndef/#define/#endif

    #ifndef/#define/#endif 头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用 "被重复引用"是指一个头文件在同一个cpp文件中被i ...

  4. #ifndef.#define, #endif 的用法

    文件中的#ifndef.#define, #endif 很关键,是为了避免多重包含,比如如果两个C文件同时包含同一头文件,那么就会出现问题,所以使用这种方法可以有效避免这种情况. 一般用法: 以add ...

  5. #ifndef/#define/#endif 防止该头文件被重复引用

       转载自:http://blog.csdn.net/abc5382334/article/details/18052757    想必很多人都看过"头文件中的 #ifndef/#defi ...

  6. #ifndef #define #endif的作用

    #ifndef #define #endif的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件.当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误. 在头文件中实用#ifn ...

  7. 头文件为什么要加#ifndef #define #endif

    一 #ifndef 在头文件中的作用 一个大的软件工程里有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.这时在头文件中使用#ifn ...

  8. c语言中endif的作用,C语言中#ifdef,#ifndef和#endif的作用

    现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...

  9. ifndef/define/endif的使用

    ifndef/define/endif:简而言之就是避免头文件被重复引用. (ifdef/define/endif是已定义的宏为真,ifndef/define/endif是未定义的宏为真) 在一个大型 ...

最新文章

  1. python书籍_Python 之父宣布加盟微软!包邮送几本 Python 书籍压压惊!
  2. 网页中获取网络mp3文件的时常
  3. 【Python-ML】SKlearn库感知器(perceptron) 使用
  4. python使用函数的目的_python之函数基本使用
  5. spring component-scan filter
  6. Sparklens:Spark应用程序优化工具
  7. Github|类别不平衡学习资源(上)
  8. jQuery(三)—— jQuery 事件 / jQuery 拷贝对象 / 多库共存 / jQuery 插件
  9. 刚公布完价格就被骂?这款新机有点惨...
  10. 苹果公司反诉堡垒之夜开发商Epic,寻求惩罚性赔偿
  11. android中Stub Proxy答疑
  12. Java原始客户端操作Mongodb 增删改查
  13. oracle主机自增,Oracle中实现ID自增
  14. tecplot教程发布
  15. 大一大学计算机期末考试题库,大学计算机基础 大一 考试必备题库
  16. dbc2000 v2.0官方版
  17. Entrez Direct学习笔记
  18. IOS逆向学习之路之iPod touch4 越狱心得
  19. JavaSE第04篇:Java基础语法之循环结构
  20. javascript根据浏览器userAgent判断浏览器类型

热门文章

  1. 双十一淘宝查历史最低价流量主小程序源码
  2. 关于h5页面的普通屏和全面屏判断
  3. 广告传媒公司那些看得到管不了的事
  4. IBM朱近之:服务助云计算在中国落地
  5. 织梦tag标签静态化
  6. 详解Siamese网络
  7. 新型联网安卓多层锁机木马分析
  8. mysql查询时间最新_MYSQL查询时间数据
  9. LeetCode面试热题十
  10. div超出不换行_css怎么设置div超出不换行?