C 无括号的If语句

C 无括号的If语句,c,if-statement,C,If Statement,我希望对没有括号的if和if-else语句以及如何阅读它们得到一些澄清。我可以轻松地阅读带有括号的if-else和else-if语句,它们对我来说很有意义,但这些语句总是让我感到困惑,下面是一个示例问题 if (x > 10) if (x > 20) printf("YAY\n"); else printf("TEST\n"); 如果没有括号,else将与紧跟其后的相关。因此,要正确地插入您的示例: if (x >

我希望对没有括号的
if
if-else
语句以及如何阅读它们得到一些澄清。我可以轻松地阅读带有括号的
if-else
else-if
语句,它们对我来说很有意义,但这些语句总是让我感到困惑,下面是一个示例问题

if (x > 10)      
     if (x > 20)
          printf("YAY\n");    
else      printf("TEST\n");

如果没有括号,
else
将与紧跟其后的
相关。因此,要正确地插入您的示例:

if (x > 10)      
     if (x > 20)
          printf("YAY\n"); 
     else // i.e., x >10 but not x > 20
          printf("TEST\n");

不带括号的if语句只考虑if后面的下一个表达式:

 if(foo > 5)
   foo = 10;
 bar = 5;

这里,如果foo大于5,foo将被设置为10,但是bar将始终被设置为5,因为它不在if语句的范围内,这将需要括号。

如果if/else上没有括号,则执行if之后的第一条语句

如果声明:

if (condition)
    printf("this line will get executed if condition is true");
printf("this line will always get executed");
如果/否则:

if (condition)
    printf("this line will get executed if condition is true");
else
    printf("this line will get executed if condition is false");
printf("this line will always get executed");
注意:如果if和匹配的else之间有多个命令,代码将中断

if (condition)
    printf("this line will get executed if condition is true");
    printf("this line will always get executed");
else
    printf("this else will break since there is no longer a matching if statement");

这是高度依赖于语言的。请指定此代码所用的语言(我猜是C,但也可能是其他语言)。话虽如此,大多数大括号语言的一般规则是,如果语句的内容是单个表达式,则流控制语句不需要有括号范围。在这种情况下,它利用了
if(xan
else
总是指
if
调节前面的表达式或块。作为旁注,从个人观点来看,我认为应该对那些在允许这两种行为的语言中使用不带括号的ifs的人采取行动。@njzk2确实如此。Apple。大多数人通常不允许使用无括号的流控制语句IDE(有时会返回<代码>如果(条件)语句除外),因为它们是无止境的bug源。它实际上不必在新行上。它是它后面的下一个表达式/语句。
如果(foo>5)foo=10;
也完全有效。
if (x > 10)      
{
     if (x > 20)
     {
         printf("YAY\n");    
     }
     else
     {
         printf("TEST\n");
     }
}