今天偶尔 发现个 很纠结的问题
先把程序 上传了
#include<reg52.h>
#define uint unsigned int
void abc(void)
{
uint a;
a++;
}
void main()
{
uint b;
while(1)
{
b++;
abc();
}
}
按照 程序的流程b++ 后 等到 执行到 abc() 函数 后 a才 ++ 可是 在调试的时候
MMX0E5L2V3JR)OJ[UESKRL5.jpg (7.86 KB, 下载次数: 0)
下载附件
2012-6-8 22:34 上传
b++ 刚执行完 a 就是加一了
还有个问题 是 明明在程序中 a 定义的是 uint 类型 应该 16位的 在调试的时候只有 8位了 百思不得其解
哪位 大大能够解释 解释的
abc 和 bcd 之间没有调用关系, 所以他们的局部变量会被编译覆盖, 就是说变量 cc 和 ii 实际上占用同一内存地址.
由于你没有给初值, 在调用bcd的时候, 它的ii实际上就是已经被加1后的abc()函数内的局部变量cc .
强人 解释的 精辟。 在实际编程中很有可能遇到两个没有调用关系的函数 局部变量就被编译覆盖了 。
嗯嗯 ,给定初值后 问题解决了。。。
thank you
一周热门 更多>