51单片机的bit操作

盆友们,比如我下面的程序段
sbit dat=P0^0;

void x(bit y){

y=0;//或y=1;

};

int main()
{
   x(dat);

}
没有报错。
这种方法为啥不行嘞
bit不是可以对变量赋值吗?


sbit dat0=P0^0;
sbit dat1=P0^1;
void x(uchar io){
switch(io)
{
  case 0:dat0=1;break
 case 1:da1=1;break;
//....
}
};

函数参数不能是sbit类型

sbit可以用于建立头文件的库,但是sbit是不能用于函数传参的
因为sbit不是char、int之类的变量类型,而是标记一个已有变量的某一位的标识符(只有bdata、地址为8的倍数的寄存器才能用sbit标记它的某位)。