c++中的# ifndef 与#endif
文章目录
- 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相关推荐
- C++中#ifndef/#define/#endif使用详解
想必很多人都看过"头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?是不能在不同的两个 ...
- ifndef/define/endif——主要目的是防止头文件的重复包含和编译
原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...
- #ifndef/#define/#endif
#ifndef/#define/#endif 头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用 "被重复引用"是指一个头文件在同一个cpp文件中被i ...
- #ifndef.#define, #endif 的用法
文件中的#ifndef.#define, #endif 很关键,是为了避免多重包含,比如如果两个C文件同时包含同一头文件,那么就会出现问题,所以使用这种方法可以有效避免这种情况. 一般用法: 以add ...
- #ifndef/#define/#endif 防止该头文件被重复引用
转载自:http://blog.csdn.net/abc5382334/article/details/18052757 想必很多人都看过"头文件中的 #ifndef/#defi ...
- #ifndef #define #endif的作用
#ifndef #define #endif的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件.当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误. 在头文件中实用#ifn ...
- 头文件为什么要加#ifndef #define #endif
一 #ifndef 在头文件中的作用 一个大的软件工程里有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.这时在头文件中使用#ifn ...
- c语言中endif的作用,C语言中#ifdef,#ifndef和#endif的作用
现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...
- ifndef/define/endif的使用
ifndef/define/endif:简而言之就是避免头文件被重复引用. (ifdef/define/endif是已定义的宏为真,ifndef/define/endif是未定义的宏为真) 在一个大型 ...
最新文章
- python书籍_Python 之父宣布加盟微软!包邮送几本 Python 书籍压压惊!
- 网页中获取网络mp3文件的时常
- 【Python-ML】SKlearn库感知器(perceptron) 使用
- python使用函数的目的_python之函数基本使用
- spring component-scan filter
- Sparklens:Spark应用程序优化工具
- Github|类别不平衡学习资源(上)
- jQuery(三)—— jQuery 事件 / jQuery 拷贝对象 / 多库共存 / jQuery 插件
- 刚公布完价格就被骂?这款新机有点惨...
- 苹果公司反诉堡垒之夜开发商Epic,寻求惩罚性赔偿
- android中Stub Proxy答疑
- Java原始客户端操作Mongodb 增删改查
- oracle主机自增,Oracle中实现ID自增
- tecplot教程发布
- 大一大学计算机期末考试题库,大学计算机基础 大一 考试必备题库
- dbc2000 v2.0官方版
- Entrez Direct学习笔记
- IOS逆向学习之路之iPod touch4 越狱心得
- JavaSE第04篇:Java基础语法之循环结构
- javascript根据浏览器userAgent判断浏览器类型