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

比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 
还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个


1.用法::标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h

  .h文件下

  #ifndef XX_H     //放在XX.h被重复引用

  #define XX_H 

  .....

  #endif

2.举个例子:

假设你的工程里面有4个文件,分别是Stock.cpp,     b.h,      c.h,     d.h。
Stock.cpp的头部是:
  #include "b.h "
  #include "c.h "

b.h和c.h的头部都是:
#include "d.h "
而d.h里面有class Stock的定义。

运行:
编译器编译Stock.cpp的时候,先根据头文件#include "b.h "去编译b.h这个问题,再根据b.h里面的#include "d.h ",去编译d.h的这个文件,这样就把d.h里面的class D编译了;
然后再根据Stock.cpp的第二句#include "c.h ",去编译c.h,最终还是会找到的d.h里面的class D,但是class D之前已经编译过了,所以就会报重定义错误。

加上ifndef/define/endif,就可以防止这种重定义错误。

  

转载于:https://www.cnblogs.com/tianjiale/p/10063336.html

C++ ifndef /define/ endif 作用和用法相关推荐

  1. C++ 头文件 #ifndef #define #endif 作用及用法

    为什么要加定义 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声 ...

  2. c:#ifndef, #define, #endif 作用

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

  3. #ifndef, #define, #endif 作用

    目录 #ifndef, #define, #endif 作用 #ifndef #ifdef #define #ifndef, #define, #endif 作用 #ifndef 它是if not d ...

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

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

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

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

  6. 每日一题(12)—— .h头文件中ifndef/define/endif的作用

     .h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...

  7. #ifndef #define #endif的作用

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

  8. 【C/C++】ifndef/define/endif的作用

    参考资料来源于网上,还未经本人实验证明. 1 作用   防止头文件被重复包含和编译. 头文件重复包含会增大程序大小,重复编译增加编译时间.   解释:#ifndef起到的效果是防止一个源文件多次包含同 ...

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

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

最新文章

  1. error:CLEARTEXT communication to api.help.bj.cn not permitted by network security policy
  2. 目标检测 | 清晰易懂的SSD算法原理综述
  3. 微软考虑将 Python 作为 Excel 官方脚本语言
  4. 使用 Redis 实现分布式速率限制
  5. c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...
  6. C++ 中常用数学函数
  7. 基于OpenResty的弹性网关实践(一)
  8. lesson1-python3运算符
  9. 循环结构程序设计(算法竞赛入门经典)课后题
  10. 语音控制面板 通过linux_在Linux中,通常把设备作为( )来处理.
  11. 金币问题c语言程序,【求助】急请c语言高手帮忙解决程序问题(问题已经被我自己解决,金币送给自己啦)...
  12. 亚马逊技能开发入门_Amazon QuickSight入门
  13. SQLPlus获取oracle表操作SQL
  14. 从技术的角度看区块链
  15. Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute
  16. SpringBoot整合CXF框架实现Webservice服务端
  17. Sql server 2008
  18. 微信小程序上传照片并且预览
  19. 使用java生成mapbox-gl可读的vector tile
  20. 我想参加计算机俱乐部用英文翻译,加入音乐俱乐部的英文怎么写_我参加音乐俱乐部已经两年了。用英语咋说...

热门文章

  1. Python核心技术总结
  2. Couchdb 任意命令执行漏洞(CVE-2017-12636)复现
  3. 获取路由器超级用户权限(你懂得...)
  4. C++ 编译练习——Cmake
  5. 爱奇艺iOS移动端网络优化实践 | 请求成功率优化篇
  6. 究竟是多牛的微服务深度原理实践进阶PDF,竟让阿里换下了Dubbo
  7. 第18.8.3章 JDK9-16变化—GC方面新特性
  8. 全球领先,人像修复、人像抠图、动漫增强技术
  9. 程序员必备的五款文本编辑器
  10. 安装Anaconda以及在pycharm中编写程序画出坐标轴