补习C语言之在.h文件中定义全局变量

本文讲述了在C语言编程中,将全局变量从.c文件移到.h文件导致的编译错误问题。通过实例展示了当.h文件中的全局变量赋初值时,因多个.c文件包含该头文件而引发的“multiple definition”错误。分析了全局变量的声明与定义的区别,并指出在头文件中定义全局变量可能导致命名冲突。
摘要由CSDN通过智能技术生成

      话说在一次整理code的时候,无意间将一个原本定义在.c文件中的全局变量移动到.h 文件中(此全局变量被多个.c文件使用),然后突然不能生成.ko(linux中可动态装载的驱动模块).怎么回事?难道是移动code的时候弄错了?仔细一看提示信息,原来是 multiple definition.没整理之前的code是将此全局变量定义在file***.c 中, 然后在其他的.c中使用的是extern 导入,当时可以很顺利的编成.ko.后来由于感觉code不美观,在整理code的时候把它提到了file***.h中,让使用到这个全局变量的.c都 include file***.h(貌似这样做不是很好?暂时不管了).怎么就这么简单移动了一下code,就会出现问题?(有段时间没写 C  code了,^_^...).

     于是乎,开始写一个简单的测试code来找原因. 下面的几段估计全世界的会玩电脑的人都能看懂的code. 先贴上:

 

//file1.h

#ifndef __FILE1_H__
#define __FILE1_H__

int i;

#endif

 

//file2.h

#ifndef __FILE2_H__
#define __FILE2_H__

#include "file1.h"

extern void file2_change_i_value(void);

#endif

//file1.c

#include "file1.h"
#include "file2.h"

void main(void)
{
    printf("before i = %d/n", i);
    file2_change_i_value();
    printf("after i = %d/n", i);
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值