重复包含和重复定义

1,重复包含可能会导致变量重复定义

重复包含:同个.c文件多次包含一个.h文件。

如果.h文件有变量的定义,则会导致变量的重复定义,此.c文件编译出错。

所以要避免重复包含。有两种方法,

一种是

#ifndef "XX_H"

#define "XX_H"

<头文件定义正文>

#endif

另一种是

#pragma once

2,重复定义还可能是另外一种情况产生的。

就是同一个.h文件,被不同的几个.c文件包含,如果.h文件有变量定义,由于各个.c文件的编译时独立进行的,编译过程正常;各个.c文件产生的.o文件链接时,工程中所有的符号整合在一起,由于文件中有重名变量,于是会出现重复定义的错误。

(要说明的是,类,内联函数以及const变量默认视为定义它们的源文件所私有,所以在第2中情况下不会产生重复定义)

那这种情况如何解决呢?

一种解决方案是:.h中只声明,其中一个.cpp中定义,剩余的.cpp文件引用.h。

另一种解决方案:.h中定义,只让一个cpp文件引用,其他cpp文件自己声明。

总之,所有的cpp文件中,对于相同的变量,只能一个定义,其余都是声明(编译时才通过)来引用(链接时会检查引用)。

最后要说明的:

一:什么是声明?什么是定义?

二:什么是内部链接?什么是外部链接?

主要参考链接:

http://blog.csdn.net/ljianhui/article/details/8541454

http://www.cnblogs.com/scut-fm/p/3210229.html


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值