据我所知,在C语言中,如果一个循环有方括号,那么它就有作用域,对吗?我在GCC中try 了一些代码,情况似乎就是这样,例如:
for(unsigned char i=0;...;...){
unsigned char j=0;
}
//Outside of the for scope:
unsigned char j=0;
在这里我们完全没有问题,但是,循环参数中的变量又如何呢?
例如,GBD C编译器中的以下代码(在线):
switch(Maneral){
case 1:
for(unsigned char i=0x0A;i<=0x64;i=i+0x0A){
indice++;
}
break;
case 2:
for(unsigned char i=0x0A;i<=0x64;i=i+0x0A){
indice++;
}
break;
}
没有给出错误,我认为它不会给出错误,因为在for‘Share’各自的for的括号的范围内的参数中初始化的变量
至少到今天为止,这是我的头等大事,因为我使用CCS C编译器为MCU编写了一些嵌入式代码;这个编译器说具有‘97%的ANSI C兼容性’,在这个编译器中,下一段代码:
switch(Maneral){
case M_CONICO:
for(unsigned char i=0x0A;i<=0x64;i=i+0x0A){ unsigned char too=0;
ActualizaValor(i,DataConico[index]);
index++;
}
break;
case M_CHICO:
for(unsigned char i=0x0A;i<=0x64;i=i+0x0A){ //LINE 'X'
ActualizaValor(i,DataChico[index]);
index++;
}
break;
}
在‘X’行给出一个错误,它显示为Identifier is already used in this scope,例如,如果我将第二个for循环中的"i"改为‘j’,它不会给出错误,并且对于在括号内声明/定义的变量(而不是在循环的参数中),它没有问题(CCC编译器)
那么,在像‘for()’这样的循环参数中初始化的变量的作用域是类似于实现定义的行为/未定义的行为,还是它是97% ANSI C Compatibility?
提前谢谢!
编辑:我知道我只能在交换机之外声明/定义‘I’,但我想要了解这一点,因为我以为我对我知道的事情很有把握