Keil C 中发现的一个问题

2500阅读 0评论2011-12-10 Alan0521
分类:WINDOWS

最近调试Keil C时发现了一个问题,写了个程序重新测试了一下:
 
//-------------------------- main.c -----------------------------
#include "test1.h"
#include "var.h"
 
void main()
{
  int a;
 global_int1 = 0;
 var[0].int_member = 1;
 
 a =  global_int1;
}
 
//-------------------------- test1.c -----------------------------
#include "test1.h"
int global_int1;
struct struct_type var[2];
 
//-------------------------- test1.h -----------------------------
extern int global_int1;
extern struct struct_type var[2];
 
//-------------------------- var.h -------------------------------
struct struct_type
{
 int int_member; 
 char char_member;
};
 test.rar   
 
以上为测试程序,编译结果一点错误都没有,运行结果理论上a应该为0,而仿真的结果是a为1.为什么为这样呢?看看m51文件就清楚了。
  -------         MODULE        TEST1
  C:0000H         SYMBOL        _ICE_DUMMY_
  D:0008H         PUBLIC        var
  D:0008H         PUBLIC        global_int1
  -------         ENDMOD        TEST1
原来变量var和global_int1的地址重叠了。
 
1.如果不是自定义的结构体类型,而是其他已知类型(如int),则内存不会覆盖。
2.如果不是结构体数组,仅仅是结构体变量,仍然会出错,不过编译会弹出警告:“TEST1.C(4): warning C230: 'var': uses undefined struct/union tag 'struct_type'”。为什么数组就不弹出警告呢?不知这算不算是一个bug。
 
上一篇:粗窥STARTUP.A51和INIT.A51
下一篇:Linux USB驱动框架分析