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

时间:2012-06-04 05:45:35

标签: c

在C中,我可以执行以下操作:

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

它有效!那是为什么?

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

5 个答案:

答案 0 :(得分:9)

C允许空语句。它们可用于空循环之类的东西:

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

你刚刚制作了一系列作品。

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

0;
1+1;

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

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

答案 1 :(得分:9)

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

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

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

为什么?

好吧,预处理器的许多用法可能会扩展到一些实际的C代码,或者根据一些早期的定义被删除,但是给定......

 MY_MACRO1();
 MY_MACRO2();

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

答案 2 :(得分:8)

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

答案 3 :(得分:3)

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

答案 4 :(得分:0)

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

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

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

这可能意味着什么     main(){cout&lt;&lt; “输入两个数字”[那么] cin&gt;&gt; a [THEN] cin&gt;&gt; b [THEN] cout&lt;&lt; “两个数字的总和是”&lt;&lt; a + b [THEN]&lt;&lt;返回0 [THEN]}

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