请问上extern不同类型同一变量名的有关问题

请教下extern不同类型同一变量名的问题
//fruit.c
#include "fruit.h"
#include <stdio.h>
int a = 4;
void Print(void)
{
printf("%d", a);
}

//fruit.h
#ifndef _FRUIT_H_
#define _FRUIT_H_
void Print(void);

#endif // _FRUIT_H_

//main.c

#include <stdio.h>
#include "fruit.h"
extern char a;
int main(void)
{
Print();
a = 3;
Print();
return 0;
}
请问下:对于编译器而言,这样是不是未定义,还是进行了牛叉的转换?VC6.0输出:43

------解决方案--------------------
没错,是未定义行为。

事实上,这也是我们要通过头文件进行局部化的主要原因。
------解决方案--------------------
不建议些同名变量,如果有,尽量将不需要暴漏的变量名前加static关键字,让该变量只在所处的文件中可以被访问。