变量的定义位置不对为啥会报错(不是函数内外的变量,在主函数下面的定义)

问题遇到的现象和发生背景

我定义了一个无符号变量i,并赋值为0,但是位置在主函数第三句就报错,放在第一句和定义为全局变量就没错我想知道原因

问题相关代码,请勿粘贴截图
#include<reg51.h>
sbit P10=P1^0;
void init()
{
    TMOD=0x01;
    TH0=0x00;      //定义初值为0
    TL0=0x00;      //定时为65536us即为65.536ms<65.790ms=1/7.6/2ms
    EA=1;
    ET0=1;
    TR0=1;
}
void main()
{
    //定义在这儿就没事
    init();    
    P10=1;
    unsigned int i=0; //在这儿就报错
    while(1)
     {    
        if(TF0==1)
        {
            TF0=0;
              TH0=0x00;
            TL0=0x00;
            i++;
            if(i==2)
            {
              i=0;
              P10=~P10;
            }        
        }    
     }
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

LED灯以7.6Hz的频率闪烁,这是我的程序达到的效果

c89标准里,函数内的变量定义必须在函数内的所有可执行代码之前。
如果用C99标准,只需要在使用之前定义就行。keil默认是C89标准。
我记得C语言教材一般都是按C89标准讲的吧。