悬挂else
程序员文章站
2022-03-09 15:26:16
...
对于问题,当x为0时,若y也为0,则输出错误,否则不做任何操作,当x不为0时,将x和y之和赋给z。
考虑下面程序段
if(x==0)
if(y==0)printf("error");
else{
z=x+y;
}
看上去似乎没问题,但由于if,else结合是根据就近原则,因此上述程序段重新调整后:
if(x==0){
if(y==0)
printf("error");
else{
z=x+y;
}
}
程序运行逻辑变成:当x为0时,若y也为0,则输出错误,否则将x和y之和赋给z,当x不为0时,则不做任何操作。
若要解决最开始描述的问题,程序应为:
if(x==0){
if(y==0)
printf("error");
}else{
z=x+y;
}
通过宏定义可以一定程度上避免
#define IF {if(
#define THEN ){
#define ELSE }else{
#define FI }}
IF x==0
THEN IF y==0
THEN printf("error");
FI
ELSE z=x+y;
FI