关于ifndef /define/endif在头文件所起作用的思考

这个问题是我在刚开始做三级项目时发现的,当我写了三个头文件、一个cpp文件后,发现vs弹出了错误。
发生了如上错误
其中,GENDER和HAIR_TYPE是我在其中base头文件定义的两个枚举类型,它们在另外两个头文件都有调用。
经过我对重定义的查找,发现了它的定义。

由于头文件重复包含了所定义的变量或者常量,编译器就会报重复定义的错误。

意思是我在另外两个头文件都定义过GENDER和HAIR_TYPE,于是发生了声明冲突。
那么问题找到了,理论上减少一次定义就可以了。不幸的是,我的两个头文件都必须使用GENDER和HAIR_TYPE这两个枚举类型。
不过天无绝人之路,仍有十分可行的办法解决这个重定义问题,以下即为解决方法:
在出现重定义错误的头文件加上:

	#ifndef FileName_H_
    #define FileName_H_   
     //插入头文件内容
    #endif

我们只用在 #define FileName_H_ 与#endif之间写入我们的头文件代码就可以了。这里的FileName_H_尽量使用文件名大写+_H_这种形式,但是要保证这个名字没有被使用。

事实上,这个问题还有更好的解决办法。
在你生成一个头文件时,vs自动帮你生成一句:
#pragma once
这个与上面的效果是一样的,所以二选一即可,个人比较推荐第一种。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值