代码之家  ›  专栏  ›  技术社区  ›  Thomas Clayson

for循环和if语句没有{}s?

  •  0
  • Thomas Clayson  · 技术社区  · 14 年前

    它们很受欢迎,但我从来没有“球”来使用它们。

    如果我这样做了:

    for(int i = 0; i<10; i++)
        if(i % 2 == 0)
            //this is included in the for loop and the if statement
            function();
    
            // is this?
            function2();
    
        // where does it stop?
        function3();
    

    for(int i = 0; i<10; i++)
        if(i % 2 == 0)
            //this is included in the for loop and the if statement
            function();
        else
            // is this run as part of the for loop? even though theres a semi colon before it?
            function2();
    

    如果我这样做。。。

    if((int)1 == (int)1) function1(); function2(); function3(); function4();
    

    所有的代码都在运行吗?

    这个怎么样?

    if((int)1 == (int)1) function();
    
    function2();
    
    
    
    function3();
    

    ; ?

    谢谢汤姆

    9 回复  |  直到 14 年前
        1
  •  9
  •   Galen    14 年前

    if/else/for/foreach/while/do只有在没有{}的情况下才会执行下一条语句。其中包括:

    if((int)1 != (int)1) function1(); function2(); function3(); function4();
    

    第一个函数将不运行,因为未满足if,其他函数不包括在if中

        2
  •  2
  •   Platinum Azure    14 年前

    取决于语言。

    在许多语言中,基本上大多数的C派生语句,if语句只执行下一个语句或语句块。(事实上,在大多数底层语法中,一个语句块确实会缩减为一个语句!)以下语言(据我所知)都是如此:

    • C类
    • C++
    • 爪哇
    • C类#

    在第一个代码示例中,仅 function() 绑定到if条件。

    # if-statement preceding block...
    if (x == 5)
    {
      print "x is 5";
    }
    
    # if-statement as a suffix conditional to one statement (line break for readability)
    print "x is 5"
      if x == 5;
    
    # Equivalent to the second, because "do BLOCK;" can be used anywhere a
    # simple statement can be used
    do
    {
      print "x is 5";
    } if x == 5;
    

    Python的工作方式更像您的初始示例所建议的那样:缩进就是一切。

    if (x == 5):
      print "x is 5"
    print "This is always printed"
    
        3
  •  1
  •   bcosca    14 年前

    这些是等价物:

    for(int i = 0; i<10; i++) {
        if(i % 2 == 0) {
            //this is included in the for loop and the if loop
            function();
        }
    }
    // is this?
    function2();
    
    // where does it stop?
    function3();
    

    for(int i = 0; i<10; i++) {
        if(i % 2 == 0) {
            //this is included in the for loop and the if loop
            function();
        }
        else {
            // is this run as part of the for loop? even though theres a semi colon before it?
            function2();
        }
    }
    

    ...

    if((int)1 == (int)1) {
        function1();
    }
    function2();
    function3();
    function4();
    

    ...

    if((int)1 == (int)1) {
        function();
    }
    function2();
    function3();
    

    总之,{}之间的任何内容都被视为单个语句,反之亦然。

        4
  •  1
  •   D.R.    14 年前

    如果要使用“inline”If状态,可以这样做:

    bool greaterthan(int a, int b){
       return a>b ? true:false;
    }
    

    这实际上意味着如果a>b返回true,否则返回false。这也可以用在许多其他方面!

        5
  •  0
  •   GrayWizardx    14 年前

    执行下一个逻辑求值“块”,这通常意味着执行下一个“语句”(以“;”结尾)。

        6
  •  0
  •   Lajos Arpad    14 年前

    所有基于C的语言(PHP在语法上是基于C的)的工作方式如下:

    for (foo1();foo2();foo3())
        operation1();
    operation2();
    

    if (foo())
        operation1();
    operation2();
    

    只执行上面的操作1

        7
  •  0
  •   JeremyP    14 年前

    如果不使用复合语句(由{}括起的语句),则只包括第一行

    for(int i=0; i<10; i++)
     if(i==5)                // included in loop
         printf("%d\n",i);   // included since if is included. 
     else
         prinf("Not Five"); // Included if is included
    

    if语句、if else语句、for循环、while循环等被视为一行

    类似地

    for(int i=0; i<10; i++)
        function1();    // included
    function2();         // not included
    

        8
  •  0
  •   Craige    14 年前

    我想指出的是,不建议使用这种语法,因为它有一个容易适得其反的租约。以以下为例:

    if (true)
        // not working properly. Exclude it for now
        //    foo()
    
    bar();
    

    在这种情况下,会执行bar()get,因为它是下一个逻辑语句,即使它显然不是要运行的语句。这有可能引起巨大的头痛,所有这些都来自一个简单的评论和结构不良的“如果”

        9
  •  -1
  •   Andrew Sledge    14 年前