在C中,我可以执行以下操作:
int main()
{
printf("HELLO WORLD");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}
它有效!那是为什么?
我个人的想法:分号是一个NO OPERATION(来自维基百科)指标,有一个巨大的字符串就像有一个并告诉C语句已经结束一样。
答案 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]}
所以,如果你要放置多个分号,就像那样,那么,那么,那么,你的个人想法确实是正确的。