#ifndef出现在所有头文件中,似乎成了定式。他在头文件中的作用是防止头文件被include多次。

给个例子:

#ifndef HEADERFILE_H
#define HEADERFILE_H
// some declarations in
// the header file.
#endif

这里面#ifndef和#endif配套使用可以起到上诉的作用。

比如我们有 a.cpp b.h c.h d.h这四个文件。

a.cpp:

#include<iostream>
#include"b.h"
#include"c.h"
using namespace
int mian()
{cout<<"Hello China"<<endl;return 0;
}

b.h:

#ifndef b_H
#define b_H
#include"d.h"
'''
b的内容
'''
#endif

c.h:

#ifndef c_H
#define c_H
#include"d.h"
'''
c的内容
'''
#endif

这里我们可以不用管d.h里面是什么内容,在编译器编译a.cpp时,先去编译b.h,而b.h里包含d.h,编译器再去编译d.h,至此b.h的内容解决完毕。编译器继续编译c.h,按逻辑继续编译d.h,但是已经编译过了,这时出现定义错误。#ifndef就是解决这个问题。

此外,#ifndef可以防止任何标识符(如类型、枚举、类和静态变量)的重新声明。它们还可以防止递归包含; 例如,“ file1.h”包含“ file2.h”,“ file2.h”包含“ file1.h”。

也就是说不管遇不遇得到这个问题,我们都需要在头文件中加入#ifndef,C++有好多这样的情况,如内联,你还能想到有哪些呢?

而#define下面定义该头文件内容。

参考:

What are #ifndef and #define used for in C++?

#ifndef用法_放下扳手&拿起键盘的博客-CSDN博客_ifndef的用法

#ifndef在头文件中的作用相关推荐

  1. #ifndef 在头文件中的作用

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

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

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

  3. C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接

    1. C++中头文件(.h)和源文件(.cpp)都应该写些什么: 总结下来就是头文件写的就是类的声明(包括类里面的成员和方法的声明)和函数的声明,但一般来说不写出具体的实现.对应的同名(可以不同名,但 ...

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

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

  5. [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法

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

  6. 头文件中能否进行函数的定义

    通常我们使用头文件时都是在头文件中进行声明,在源文件中定义,哪我们能否在头文件中进行函数的定义 我们先进行一个测试,先声明一个test.h和一个test.cpp文件,并且在test.h中定义一个函数和 ...

  7. C++中头文件中定义的变量

    1.在头文件.h中定义static变量,如: static int x;其实就等效于每个引用该头文件的源文件中,定义一个变量名为x的整型静态全局变量,每个文件中的x变量均属于本源文件,各文件中的互不相 ...

  8. CVAVR生成的典型USART收发的接口程序(MEGA16只有一个串口所以不用区分是哪个串口的中断相量编号,而MEGA2560多个串口,在头文件中就区分开多个串口的中断相量编号,参考各自头文件)

    一般教科书上提供的UART收发的程序往往是一段采用轮循(Polling)方式完成收发的简单代码.但对于高速的AVR来讲,采用这种方式大大降低了MUC的效率.在使用AVR时,应根据芯片本身的特点(片内大 ...

  9. c语言头文件中定义inline static相关函数的优劣

    头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...

最新文章

  1. SpringCloud断路器hystrix
  2. android 之intent(意图)详解
  3. 常用的绘图约定——提高绘图和读图的效率
  4. Java重写、super关键字、继承中的构造方法
  5. 作者:胡良霖(1973-),男,中国科学院计算机网络信息中心高级工程师
  6. php多级查询,MySQL 多级查询
  7. 在CDH sandbox中安装并测试livy
  8. 雷军牵手李嘉诚;董明珠被“排挤”;余额宝限购终结| CSDN极客头条
  9. Vue 事件绑定 事件修饰符 条件判断 循环遍历
  10. 源1.0预训练语言模型使用示例
  11. JAVA 调用摄像头
  12. JavaEE面试注意事项
  13. 查看本地ip地址和端口方法
  14. CentOS 无法连接网络解决办法
  15. 基于Python的动漫人物分类识别系统
  16. poi操作word实现分页
  17. Requests: 1, Fetched: 0, Skipped: 0, Processed: 0
  18. 信奥中的数学 数论篇 相关资料汇总(2022.07.07)
  19. 一九产业AI速写:工业篇
  20. 移动通信第六章,多址技术

热门文章

  1. Hadoop读书笔记——基础知识
  2. 网购平台与https
  3. android中如何取得用户手机的常用联系人(即收藏夹的联系人)
  4. OVS常用命令与使用总结
  5. OVS的作用OVS 总体架构、源码结构及数据流程全面解析
  6. 2022 gdcpc题解(10/13)
  7. php和java哪个好学,哪个好找工作,好就业
  8. 推荐系统 之 Transformer
  9. docker基本概述+部署(一)
  10. 什么是Etag?ETag的应用