else if 和大括号
else if & curly brackets
为什么这两个代码片段有不同的输出?
它们之间的唯一区别是每个 if/else-if 语句周围的大括号,但这在这里无关紧要,对吧?
while (1){
if (i>=n&&j<0)
break;
else if (j<0)
if (Arr[i])
c++;
else if (i>=n)
if(Arr[j])
c++;
else if (Arr[i]==1&&Arr[j]==1)
c+=2;
i++;
j--;
}
..
while (1){
if (i>=n&&j<0){
break;
}
else if (j<0){
if (Arr[i])
c++;
}
else if (i>=n){
if(Arr[j])
c++;
}
else if (Arr[i]==1&&Arr[j]==1){
c+=2;
}
i++;
j--;
}
如果第一个代码片段的格式正确
while (1){
if (i>=n&&j<0)
break;
else if (j<0)
if (Arr[i])
c++;
else if (i>=n)
if(Arr[j])
c++;
else if (Arr[i]==1&&Arr[j]==1)
c+=2;
i++;
j--;
}
那么可以看出else or else if对应的是最接近的if语句
解析器将 else-branch
与最接近的 if
链接起来,因此它将解析像
这样的表达式
if(a) if(b) c; else d;
作为
if(a) {if(b) c; else d;}
而不是
if(a) {if(b) c;} else d;
为什么这两个代码片段有不同的输出?
它们之间的唯一区别是每个 if/else-if 语句周围的大括号,但这在这里无关紧要,对吧?
while (1){
if (i>=n&&j<0)
break;
else if (j<0)
if (Arr[i])
c++;
else if (i>=n)
if(Arr[j])
c++;
else if (Arr[i]==1&&Arr[j]==1)
c+=2;
i++;
j--;
}
..
while (1){
if (i>=n&&j<0){
break;
}
else if (j<0){
if (Arr[i])
c++;
}
else if (i>=n){
if(Arr[j])
c++;
}
else if (Arr[i]==1&&Arr[j]==1){
c+=2;
}
i++;
j--;
}
如果第一个代码片段的格式正确
while (1){
if (i>=n&&j<0)
break;
else if (j<0)
if (Arr[i])
c++;
else if (i>=n)
if(Arr[j])
c++;
else if (Arr[i]==1&&Arr[j]==1)
c+=2;
i++;
j--;
}
那么可以看出else or else if对应的是最接近的if语句
解析器将 else-branch
与最接近的 if
链接起来,因此它将解析像
if(a) if(b) c; else d;
作为
if(a) {if(b) c; else d;}
而不是
if(a) {if(b) c;} else d;