c语言if单语句花括号问题

if(mulop==times)
{
gendo(opr,0,4);
}
else
{
gendo(opr,0,5);
}
最近学编译原理,发现这里加花括号和不加花括号的结果是不一样的。gendo是宏定义函数,目的是对另一个导向函数的判断。忘大神指点。

gendo是宏定义函数,所以,这个加不加括号要看你的gendo宏是如何定义的了!

如果gendo 这个宏有多条语句实现,则必须加括号,不然可能编译都会有问题!追问

宏定义函数是 if(-1==gen(a,b,c)) return-1;gen函数里有多条语句。

追答你这个宏,在解开后,如果没有括号,结果会是:
if(mulop==times)
if(-1==gen(opr,0,4)) return-1;
        else
    if(-1==gen(opr,0,5))  return-1;
执行过程:if(mulop==times)条件成立,才去执行gen(opr,0,4) ,执行gen(opr,0,4) 返回不是-1,又会去执行gen(opr,0,5)

有括号,结果会是:
if(mulop==times) 
{
if(-1==gen(opr,0,4)) return-1;
}
else
{
if(-1==gen(opr,0,5))  return-1;
}
执行过程:if(mulop==times) 条件成立,执行gen(opr,0,4)  否则执行gen(opr,0,5)

追问

谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-19
if 和else后面只能运行一个语句或是一个复合语句块,加{} 是把多条码语句组成一个复合语句块
第2个回答  2015-04-19
这个东西应该与编译器有关吧。
另外,你的编译器能对不加 {}进行编译?追问

可以的

第3个回答  2015-04-19
不一样?结果应该是 一致的