为什么你在C中使用多个分号?

在CI中可以执行以下操作:

int main() { printf("HELLO WORLD");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; } 

它的工作原理! 这是为什么?

我个人的想法:分号是一个NO OPERATION(来自维基百科)指标,有一个巨大的字符串就像有一个并告诉C声明已经结束一样。

分号终止一个语句……连续的分号代表无操作语句(如你所说)。 考虑:

 while (x[i++] = y[j++]) ; 

这里,所有工作都是在循环测试条件下完成的,因此需要一个空语句。 但是,即使没有控制循环,也允许空语句。

为什么?

好吧,预处理器的许多用途可以扩展到一些实际的C代码,或者基于一些早期的定义被删除,但是给出……

  MY_MACRO1(); MY_MACRO2(); 

…预处理器只能替换MY_MACROX()文本,并在可能在空语句之后留下尾随分号。 如果编译器拒绝这一点,那么使用预处理器就会困难得多,或者预处理器调用不像非预处理器函数调用(它们必须在替换中输出分号,并且调用者必须避免使用尾随分号当使用它们时 – 这将使实现更难以用巧妙的宏替代用于性能,调试和定制目的的函数。

C允许空语句。 它们对于空循环这样的东西很有用:

 while (*d++ = *s++) ; // null statement. 

你刚刚创建了一系列它们。

它还允许不完全空的语句,如:

 0; 1+1; 

这两个都包含表达式,但没有副作用,因此它们并没有真正做任何事情。 虽然编译器可能会警告它们,但它们是被允许的。

一个不错的编译器通常不会为上述任何一个生成任何代码(大多数甚至不会关闭优化,我无法想象一个优化开启的代码)。

两个分号一起形成一个空语句。 C不介意有空语句 – 它们不生成任何代码。

因为分号在C中标识语句的结尾,在你的情况下,更多的分号标识更多的空语句……没有错,它们只是空语句。

分号是行终止符,这意味着它们告诉代码已到达行的末尾,然后执行下一行代码。

一个证据是您可以在一行中编写代码,不包括指令。

 main() { cout << "ENTER TWO NUMBERS"; cin >> a; cin >> b; cout << "The sum of two numbers are" << a+b; << return 0;} 

这可能意味着main(){cout <<“输入两个数字”[那么] cin >> a [THEN] cin >> b [THEN] cout <<“两个数字的总和是”<< a + b [THEN] ] << return 0 [THEN]}

所以,如果你要放置多个分号,就像那样,然后那么,那么,你的个​​人想法确实是正确的。