代码之家  ›  专栏  ›  技术社区  ›  Harshil Doshi

在我的方法中有一个块是什么意思?

  •  0
  • Harshil Doshi  · 技术社区  · 7 年前

    我以前有以下代码:

     public class Program
        {
    
            public static void Main(string[] args)
            {
                  int i = 0;
               while(condition)
               {
                 .........
                 .........
                if (condition)           
                {
                    i = 6;
                    Console.WriteLine("Inside Block :" +i);
                }
               else
                {
                i = 7;
                Console.WriteLine("After block : " + i);
                }
              }
            }               
        }
    

    i 每次。所以我注释掉了代码,但这样做我犯了一个愚蠢的错误,所以现在我的代码看起来如下:

    {

            public static void Main(string[] args)
            {
                  int i = 0;
               while(condition)
               {
                 .........
                 .........
               // a block without condition                    
                {
                    i = 6;
                    Console.WriteLine("Inside Block :" +i);
                }
    
              }
            }               
        }
    

    if 条件,但忘记删除街区,现在,这个块在这里是什么意思。不管怎样,每次我想要的时候它都会被执行,但是为什么它在编译时没有给出任何错误呢?

    Initializer Block 在里面 Java Multi-Threading 环境?

    0 回复  |  直到 7 年前
        1
  •  2
  •   Sweeper    7 年前

    为什么它在编译时没有给出任何错误?

    我们这里有什么术语/概念吗?

    因为C允许你这么做。C语言规范第1.5节:

    { }

    因此,实际上,您熟悉的if语句和while语句只需要在它们的头后面有一个语句,并且由于在允许单个语句的地方允许一个块,所以您可以在那里写一个块。

    这些没有任何标题的块和其他块一样工作。他们创造了一个新的范围。无法在块外部访问块中声明的变量。

        2
  •  2
  •   user11055057    7 年前

    基本上当你把 {} 块(也称为作用域)它定义代码执行的边界。

    public static void Main(string[] args)
            {
                  int i = 0;
               while(condition)
               {
                 .........
                 .........
               // a block without condition                    
                {
                    i = 6;
                    Console.WriteLine("Inside Block :" +i);
                }
    
              }
            }               
        }
    
    

    因为你的变量 i

    假设您在该作用域内定义了一个变量,并尝试在外部访问它,它将生成一个错误,因为在作用域内定义的任何变量都有其对作用域边界的限制。

    例如。

    public static void Main(string[] args)
            {
                  int i = 0;
               while(condition)
               {
                 .........
                 .........
               // a block without condition                    
                {
                    int j = 44;
                    i = 6;
                    Console.WriteLine("Inside Block :" +i);
                }
    
              }
              Console.WriteLine(j); // <------------------ This would generate error.
            }               
        }