C中的单行if语句 - 哪些语句受到影响?

时间:2017-07-26 09:19:14

标签: c if-statement conditional

我正在尝试将一些代码从C转换为另一种语言。我没有快速访问C编译器,只是发现自己与单行if语句混淆。我知道这样的陈述:

if (condition) [statement]

if (condition)
    [statement]

可以在没有括号的情况下进行评估,即相当于:

if (condition) {[statement]}

if (condition)
    {[statement]}
分别是

,但我不确定我正在处理的示例代码。它是:

if (ge.g[*l][*k].s==1) *i=1; else *i=Ne;  
*j=*l; 

我觉得第二行不受if语句的影响,但是从代码的上下文中看不出来。长话短说:以上相当于:

if (ge.g[*l][*k].s==1) {*i=1;} else {*i=Ne;}  
*j=*l; 

if (ge.g[*l][*k].s==1) {*i=1;} else {*i=Ne;  
*j=*l;} 

4 个答案:

答案 0 :(得分:5)

以下代码

if (ge.g[*l][*k].s==1) *i=1; else *i=Ne;  
*j=*l; 

正确格式化时,如下所示:

if (ge.g[*l][*k].s==1)
   *i=1;
 else
   *i=Ne;  

*j=*l; 

这是带有大括号的等效代码

if (ge.g[*l][*k].s==1)
{
   *i=1;
}
else
{
   *i=Ne;  
}

*j=*l; 

这显示了正确格式化代码的重要性,因此人类可以阅读和理解,而不仅仅是编译器。

答案 1 :(得分:1)

花括号实际上将一些语句组合为一个复合语句。

if的语法如下:

if (condition) statement1 [else statement2]

其中[]表示:可选

现在statement1可以是单个语句(由分号分隔),也可以是所谓的复合语句,即用大括号括起来的一组后续语句。 statement2也是如此。

这就是为什么你的第一个选择是正确的。如果涉及第二行,则必须使用大括号,将语句组合成一个复合语句。由于没有" curlies",第一种选择是正确的。

答案 2 :(得分:1)

  

单一陈述(不含括号)。

一个声明以单身结尾的操作;登录

if (condition)
    statement 1;

示例:

 if (ge.g[*l][*k].s==1) 
     *i=1;  // statement 1
 else 
     *i=Ne; // statement 1

 *j=*l; // statement 2
  

单一陈述(带括号)。

if (condition) {
    statement 1;
}

示例:

 if (ge.g[*l][*k].s==1)  {
     *i=1;  // statement 1
 }
 else {
     *i=Ne; // statement 1
 }

 *j=*l; // statement 2
  

多个声明(带括号)

当您的对帐单多个时, 只需要

if (condition) {
    statement 1;
    statement 2;
    statement n;
}

示例:

 if (ge.g[*l][*k].s==1) {
     *i++; // statement 1
     *i++; // statement 2
     *i++; // statement 3
 }

答案 3 :(得分:0)

简化括号

  

{}

创建一个"化合物"声明(我知道C学者会非常沮丧地看到这个"定义")。在你的问题中,单个语句可以用复合语句替换(在大括号中)。语句的位置无关紧要,因为编译器忽略了大部分空格(除了字符串和预处理器处理的所有内容)。你甚至可以添加100000个换行符,它不会改变任何东西。它对我们人类来说很重要:))

if(x==y)start(x);else start(y);

===

if (x == y)
    start(x);
else 
    start(y);

===

if      (x       ==                  y)





                                                                start(              x          ); 



                                                                 else 




start(                                           y)                        

;

但第二个是最容易阅读恕我直言的人:)