考虑这个C代码:
#include <stdio.h>;
int main(void) {
puts("Hello, world!");; ;
;
return 0; ;
; ;
};
在这里,我几乎可以在任何地方放置分号。纯娱乐。但令人惊讶的是it worked!我收到了关于分号后分号的警告,但其他绝对错误的分号也起作用了。如果我忘记在puts
之后加一个分号,我将收到以下错误
错误:预期';'在'返回'之前
为什么许多错误和无用的分号都不会导致错误?在我看来,他们应该被视为语法错误。
单个分号构造一个空语句。它不仅合法,在某些情况下也很有用,例如,不需要真实身体的while
/ for
循环。一个例子:
while (*s++ = *t++)
;
C11 6.8.3表达式和空语句
空语句(仅由分号组成)不执行任何操作。
唯一的语法错误是这一行:
#include <stdio.h>;
分号表示语句的结尾是否为空。没有分号意味着你没有关闭/结束最后一个语句但是启动了一个给出错误的新语句。分号过多表示每个空白语句结束。所以,它不会给出错误
为什么空语句应该是错误的?它不是。
;
(语句分隔符)始终用于指定特定语句的结束。在执行下一个语句之后。
如果你没有放置分隔符,那么它会考虑当前语句的下一个语句并执行。这会产生语法错误。
但在其他情况下,当我们放置多个分隔符时,例如:
int a;;;;;
在这种情况下,我们有5个语句,其中int a
是第一个语句,接下来的四个语句是空语句,编译时将由编译器删除。
查看此问题的一些有趣案例:
int main()
{
int a=0 ;,;
return 0;
}
当我们改变上面的程序时它仍然有效:
int main()
{
int a=0 ,; /*change done*/
return 0;
}
;
是C中的语句分隔符,如上面的答案中所述。 Rahul的答案是完全正确的,只是你可以看到this回答一个问题,该问题询问为什么C语句以分号结尾。因此,当您理解为什么使用分号时,您将了解当您放置过多分号时会发生什么。