解决 multiple definition of***

本文介绍了当多个C文件包含同一头文件导致全局变量重复定义的问题及其解决方案。通过将全局变量的具体定义放在单独的C文件中,并在头文件中使用extern关键字声明,可以有效避免编译时出现的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设前提:a.h头文件包含了全局变量,可能是变量也可能是函数,其他的多个C文件都需要调用a.h文件,编译时就会报错: multiple definition of ***

 

原因在于:由于工程中的每个文件都是独立的解释的,
(即使头文件有
#ifndef _x_h
....
#enfif )
在其他文件中只要包含了此头文件就会独立的解释,然后生成每个文件独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。

 

解决办法:建立一个a.c文件,将全局变量的各种具体定义放在此C文件中,然后在a.h文件用extern进行变量全局引用,从而解除错误。

比如:其他的C文件需要结构体bb变量,我们可以将其定义到a.c文件中

          struct aa

         {

          ............

          };

         struct aa bb;

         我们再在a.h文件全局引用bb变量

         extern struct aa bb;

         引用的时候不能够有定义的具体数值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值