关于C语言中定义的变量的有效范围的问题。

#include<reg52.h>
void delays(ms)
{ unsigned int k;
while(ms--)
{
for(k=0; k<144;k++);
}
}
void main()
{
int k=0;
P0=0XFE;
P2=0XFE;

while(1)
{
static unsigned int m=0XFE;
/*为什么变量m 定义在while(1)外,main()内的时候,编译器keil显示在while(1)内的m没有定义?*/

for(k=0; k<7; k++)
{delays(300);
m<<=0x01;
m|=1;
P0=m;
P2=m;}
for(k=0; k<7; k++)
{delays(300);
m>>=1;
m|=0x01;
P0=m;
P2=m;}
}
}

C 语言,声明要在语句之前。
void main()
{ int k=0;
static unsigned int m=0XFE; // 放在这里
P0=0XFE;
P2=0XFE;
while(1)
{ // main 的 m 将起作用
.....}
}
====================
C 语言, 用花括号括起的区域叫“域”,每个域都是声明在前语句在后。
多对花括号 并列,嵌套 就构成了 域,外层域声明的变量可以作用到内层。追问

哦 谢谢~ 我明白了~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-08
好像循环里面定义变量是C++才有的。追问

但是只有这样在循环内定义,编译才显示正确。。。

追答

不可能,放在函数开始吧。

第2个回答  2012-10-08
感觉这是编译器bug
第3个回答  2012-10-08
抱歉不知道
相似回答