话说在一次整理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);
}