#ifndef #define #endif的使用

在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误。
例如:假设你的工程里面有4个文件,分别是 a.cpp , b.h, c.h, d.h。a.cpp的头部是:#include "b.h "#include "c.h "b.h和c.h的头部都是:#include "d.h "而d.h里面有int a,即a的定义。这样一来,编译器编译a.cpp的时候,先根据#include "b.h "去编译b.h这个文件,再根据b.h里面的#include "d.h ",去编译d.h的这个文件,这样就把d.h里面的int a编译了;然后再根据a.cpp的第二句#include "c.h ",去编译c.h,最终还是会找到的d.h里面的int a,但是int a之前已经编译过了,所以就会报重定义错误。

作用:在头文件中使用#ifndef #define #endif能避免头文件的重定义。

使用方法:例如要编写头文件stm32f10x.gpio.h
在这里插入图片描述
在头文件开头写上两行:
#ifndef _STM32F10X_GPIO_H
#define _STM32F10X_GPIO_H //一般是文件名的大写
头文件结尾写上一行:#endif
这样一个工程文件里同时包含两个stm32f10x.gpio.h时,就不会出现重定义的错误了。
分析:当第一次包含stm32f10x.gpio.h时,由于没有定义 _STM32F10X_GPIO_H,条件为真,这样就会包含(执行
)#ifndef _STM32F10X_GPIO_H和#endif之间的代码,当第二次包含stm32f10x.gpio.h时前面一次已经定义了_STM32F10X_GPIO_H,条件为假,#ifndef _STM32F10X_GPIO_H和#endif之间的代码也就不会再次被包含(执行),这样就避免了重定义了。主要用于防止重复定义宏和重复包含头文件。

链接:https://www.jianshu.com/p/2c349d00f712

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值