Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1258627
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: WINDOWS

2011-12-10 15:38:15

最近调试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;
};
 
以上为测试程序,编译结果一点错误都没有,运行结果理论上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。
 
阅读(2231) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~