if-else连用时的陷阱
近日,在实现《The C Programing Language》上的一个练习题时,写出了下面一段代码
for(i=left+1; i<=right; i++) { if(reverse == 0) if( (*comp)(v[i], v[left]) < 0 ) swap(v, i, ++last); else if( (*comp)(v[i], v[left]) > 0 ) swap(v, i, ++last); }
本意是第一个 if 和 else 相匹配,但是为了代码简洁,效仿《TCPL》上的普遍做法,省略掉了花括号,
结果却忽视了if-else语句的结合规则,导致else和它紧邻的那个if相结合,因而使程序结构完全发生变化,变成如下所示结构
for(i=left+1; i<=right; i++) { if(reverse == 0) if( (*comp)(v[i], v[left]) < 0 ) swap(v, i, ++last); else if ( (*comp)(v[i], v[left]) > 0 ) swap(v, i, ++last); }
所以,还是带上花括号比较好
for(i=left+1; i<=right; i++) { if(reverse == 0) { if( (*comp)(v[i], v[left]) < 0 ) swap(v, i, ++last); } else if( (*comp)(v[i], v[left]) > 0 ) swap(v, i, ++last); }