为什么带有多个分号的代码会编译?

时间:2010-09-23 20:29:16

标签: c# syntax

我很想知道为什么允许这样做。

int i=0;;

我偶然输入了那个。但该计划编制。多年后我注意到我输入了;;

之后我尝试使用不同的符号,例如~, !, : etc etc

为什么不允许第一个允许的地方。

很想知道。

5 个答案:

答案 0 :(得分:16)

您输入了一个空语句:

int i=0; // that's one statement
; // that's another

C#中的声明没有正文是合法的。

来自C# Language Specification的第8.3节:

  

空语句什么都不做。

     

空语句:
     ;
  如果在需要语句的上下文中没有要执行的操作,则使用空语句。

答案 1 :(得分:5)

空语句实际上很有用。看看这个有趣的无限循环示例:

    for (;;)
    {
        // loops infinitely
    }

运行以下版本作为证明,但是从无穷远处打破:

    int count = 0;
    for (;;)
    {
        count++;
        if (count > 10) break;
    }

    Console.WriteLine("Done");

但是,如果您真的想要进行无限循环,请使用:while (true) {}而不是for (;;) {}。 while(true)不那么简洁,易于阅读,并且可以无限期地传达循环的意图。

答案 2 :(得分:1)

额外的;只标出了一个额外的,虽然是空白的“C#代码行”。其他符号只有在自己放置时才有意义。

答案 3 :(得分:1)

C#(以及许多其他语言)使用分号来分隔语句,而不是关心换行符。空语句有效,因此您可以根据需要添加任意数量的分号。它还意味着您可以将多个语句放在一行上,或者将多个语句拆分为多行 - 编译器不关心。

答案 4 :(得分:0)

因为分号表示语句的结束。其他人没有。你可以有一个空白的陈述。