这个for循环发生了什么
Whats happening in this for loop
for 循环的第一条语句发生了什么?我似乎无法理解为什么 1 == 2 是可以接受的,因为它是比较而不是赋值。
char ch = 120;
unsigned char x = 1;
unsigned int y = 1;
for(1 == 2; ch > 0; ch++) {
printf("%d\n", ch);
x <<= 1;
y *= 2;
}
这只是一条无用的语句,编译器会优化掉。 for
中的第一条语句不需要是赋值,它只是构建为 succinct/readable 循环一组值的方式。您可以将 for
循环扩展为 while
,这样可能会更清楚:
1 == 2; // does nothing, likely emits compiler warning.
while( ch > 0 )
{
printf("%d\n", ch);
x <<= 1;
y *= 2
ch++;
}
如果要对 post 迭代表达式使用 for 循环但已经初始化变量,则可以使用 null 语句作为第一个表达式:
for( ; ch > 0; ch++ ){ /* ... */ }
for 循环的第一条语句发生了什么?我似乎无法理解为什么 1 == 2 是可以接受的,因为它是比较而不是赋值。
char ch = 120;
unsigned char x = 1;
unsigned int y = 1;
for(1 == 2; ch > 0; ch++) {
printf("%d\n", ch);
x <<= 1;
y *= 2;
}
这只是一条无用的语句,编译器会优化掉。 for
中的第一条语句不需要是赋值,它只是构建为 succinct/readable 循环一组值的方式。您可以将 for
循环扩展为 while
,这样可能会更清楚:
1 == 2; // does nothing, likely emits compiler warning.
while( ch > 0 )
{
printf("%d\n", ch);
x <<= 1;
y *= 2
ch++;
}
如果要对 post 迭代表达式使用 for 循环但已经初始化变量,则可以使用 null 语句作为第一个表达式:
for( ; ch > 0; ch++ ){ /* ... */ }