在一个大型项目里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中使用#ifndef、#define、#endif能避免头文件的重定义。
方法:
例如要编写头文件test.h。
在头文件开头写上两行:
#ifndef _TEST_H
#define _TEST_H //一般是文件名的大写

头文件结尾写上一行:
#endif
这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。
分析:
当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和#endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和#endif之间的代码也就不会再次被包含,这样就避免了重定义了。

转自http://www.diybl.com/course/3_program/c++/cppsl/20081010/149887.html

转载于:https://blog.51cto.com/changhe188/285106

用#ifndef、#define、#endif避免头文件的重定义相关推荐

  1. #ifndef #define #endif ”防止头文件被重复包 .

    #include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h" #include "x.h" ...

  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. C++ ifndef /define/ endif 作用和用法

    ifndef/define/endif"主要目的是防止头文件的重复包含和编译 比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件 ...

  5. 【转载】#pragma once与#ifndef #define #endif的区别

    一.相同点         两者的共同点都是为了避免同一个文件被 include 多次,但是 #ifndef #define #endif 不只有这个作用.  在能够支持这两种方式的编译器上,二者并没 ...

  6. #ifndef #define #endif的作用

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

  7. ifndef/define/endif的使用

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

  8. #pragma once 和 #ifndef ... #define ... #endif 的区别

    这两者都是为了防止文件被包含多次.但是有些细微的区别: 1,来源的区别:#pragma once 是编译系统相关的,由编译器提供.而#ifndef ...#define ... #endif 是c/c ...

  9. c/c++头文件中#ifndef/#define/#endif的用法

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

最新文章

  1. 迁移学习之VGG16和VGG19
  2. BCH的创新已打破比特币的共识效应
  3. 关于angular的$resource中的isArray属性问题
  4. python迅雷sdk_Python anthunder包_程序模块 - PyPI - Python中文网
  5. Java高级语法笔记-自定义异常类
  6. javascript基础-ajax
  7. 设置VSS使支持通过Internet访问
  8. linux cpu mysql_Linux 指定MySQL服务运行的CPU核心(数)
  9. php aws_2018-03-06 使用AWS PHP SDK将文件上传到AMAZON S3
  10. 2021年10月国产数据库大事记-墨天轮
  11. 三个元素的矩阵乘除法
  12. 张云雷的《探清水河》登上央视,为什么蔡国庆可以随心所欲地唱
  13. 手写demo了解vue响应式原理,订阅模式,观察者模式
  14. Ant Design select下拉框突然拉长
  15. RT-Thread柿饼控件(4)-- Card
  16. 四、五星级酒店的点评在点评总量中的占比高达79.6%
  17. 音视频基础知识---音频编码格式
  18. 计算机开始按钮的功能,Windows7系统开始菜单有哪些新增的功能
  19. C++面向对象程序设计实验题:有理数类(分数类)设计
  20. 模拟摄像头CCD板机揭秘

热门文章

  1. 【星球知识卡片】AutoML都有哪些核心技术,如何对其进行长期深入学习
  2. 【pytorch速成】Pytorch图像分类从模型自定义到测试
  3. 中国电磁线行业供需状况与十四五竞争态势研究报告2022版
  4. 长白山特色产品谋定农民丰收节交易会 吉林蛟河农商互联
  5. 新农人谋定新理念-农业大健康·李孟:“玩”出农业新花样
  6. awk对某个字段分割处理
  7. html语义化练习易牛课堂代码
  8. BZOJ2169 连边(动态规划)
  9. CSU - 2059 Water Problem(Z线分割平面)
  10. USACO 2.3 Money Systems(DP)